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 .. range
construction boucle sur tous les éléments et fournit deux valeurs: l'index i
et la valeur v
.
range
fonctionne également sur les cartes et les canaux.
Néanmoins, si vous n'aimez pas for
sous quelque forme que ce soit, vous pouvez définir each
, map
etc. 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 :)