I would typically expect
anyBlue := false
for _, c in range col {
ready, err := c.IsReady()
if err != nil {
return nil, fmt.Errorf("isReady failed: %v", err)
}
if !ready {
continue
}
x, err := ConvertToX(c)
if err != nil {
return nil, fmt.Errorf("convertToX failed: %v", err)
}
color, err := x.GetColor()
if err != nil {
return nil, fmt.Errorf("getColor failed: %v", err)
}
if color == BLUE {
anyBlue = true
break
}
}
which badly obscures what’s going on but demands no cleverness at all (except that some might forget the “break” and still get the right answer).