J'ai vu quelques personnes se plaindre de la boucle for, du genre "pourquoi devrions-nous avoir à dire i = 0; i < len; i++de nos jours?".
Je ne suis pas d'accord, j'aime la construction for. Vous pouvez utiliser la version longue si vous le souhaitez, mais le Go idiomatique est
var a = []int{1, 2, 3}
for i, v := range a {
fmt.Println(i, v)
}
La for .. rangeconstruction boucle sur tous les éléments et fournit deux valeurs: l'index iet la valeur v.
range fonctionne également sur les cartes et les canaux.
Néanmoins, si vous n'aimez pas forsous quelque forme que ce soit, vous pouvez définir each, mapetc. en quelques lignes:
type IntArr []int
// 'each' takes a function argument.
// The function must accept two ints, the index and value,
// and will be called on each element in turn.
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}) // create int slice and cast to IntArr
var fnPrint = func(i, v int) {
fmt.Println(i, ":", v)
} // create a function
a.each(fnPrint) // call on each element
}
impressions
0 : 2
1 : 0
2 : 0
3 : 9
Je commence à aimer beaucoup Go :)