GoGoPrimer
< Retour au module

Structures de contrôle

for, la seule boucle

Contrairement à la plupart des langages, Go n'a ni `while` ni `do-while` : tout se fait avec `for`. La forme la plus proche d'un `for` classique en C ressemble à ceci.

for i := 0; i < 5; i++ {
fmt.Println(i)
}
// affiche 0, 1, 2, 3, 4

En omettant l'initialisation et l'incrément, il ne reste qu'une condition : c'est l'équivalent d'un `while`.

count := 0
for count < 3 {
fmt.Println(count)
count++
}

Sans aucune condition, `for` boucle indéfiniment ; on en sort avec `break`. Et pour parcourir une collection (slice, tableau, map, string), on utilise `for ... range`, qui renvoie l'index et la valeur à chaque itération.

fruits := []string{"pomme", "poire", "kiwi"}
 
for index, fruit := range fruits {
fmt.Println(index, fruit)
}
// 0 pomme
// 1 poire
// 2 kiwi
 
for {
fmt.Println("boucle infinie")
break // indispensable pour ne pas boucler éternellement
}

Si tu n'as besoin que de la valeur, pas de l'index, remplace-le par `_` : `for _, fruit := range fruits`. Une variable déclarée et jamais lue est une erreur de compilation, même dans une boucle.

À toi de jouer

Écris une fonction `sum(numbers []int) int` qui additionne tous les éléments d'un slice d'entiers avec un `for range`.

func sum(numbers []int) int {
// à compléter
}