Я видел, как несколько человек жаловались на цикл for: «Почему мы должны говорить i = 0; i < len; i++
в наши дни?».
Я не согласен, мне нравится конструкция for construct. Вы можете использовать длинную версию, если хотите, но идиоматический Go
var a = []int{1, 2, 3}
for i, v := range a {
fmt.Println(i, v)
}
for .. range
Конструкция цикла по всем элементам , и подают два значения - индекс i
и значениеv
.
range
также работает с картами и каналами.
Тем не менее, если вам не нравится for
в какой-либо форме, вы можете определить each
и map
т. Д. В нескольких строках:
type IntArr []int
func (a IntArr) each(fn func(index, value int)) {
for i, v := range a {
fn(i, v)
}
}
func main() {
var a = IntArr([]int{2, 0, 0, 9})
var fnPrint = func(i, v int) {
fmt.Println(i, ":", v)
}
a.each(fnPrint)
}
отпечатки
0 : 2
1 : 0
2 : 0
3 : 9
Я начинаю сильно любить го :)