Changes in new versions / Go 1.23

func Enumerate[T any](s []T) iter.Seq2[int, T] {
    return func(yield func(int, T) bool) {
        for i, v := range s {
            if !yield(i, v) {
                return
            }
        }
    }
}

names := []string{"ann""bob"}

// *** before: ***
for i := 0; i < len(names); i++ {
    fmt.Println(i, names[i])
}

// *** in version 1.23: ***
for i, name := range Enumerate(names) {
    fmt.Println(i, name)
}