Widziałem kilka osób narzekających na pętlę for, w stylu „dlaczego powinniśmy mówić i = 0; i < len; i++
w dzisiejszych czasach?”.
Nie zgadzam się, podoba mi się konstrukcja for. Jeśli chcesz, możesz użyć długiej wersji, ale idiomatyczny Go jest
var a = []int{1, 2, 3}
for i, v := range a {
fmt.Println(i, v)
}
for .. range
Konstrukt pętle nad wszystkimi elementami i zasila dwie wartości - indeksi
oraz wartośćv
.
range
działa również na mapach i kanałach.
Mimo to, jeśli nie podoba for
w jakiejkolwiek formie, można określić each
, map
itd. W kilku zdaniach:
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)
}
wydruki
0 : 2
1 : 0
2 : 0
3 : 9
Zaczynam bardzo lubić Go :)