ApprentiGO

For

  ·   3 min read

For

for est l’unique mot-clé servant à faire des boucles dans le language go mais il être utilisée de 4 façons.

1) for

for (seul) sert à crée une boucle infini

for {
        fmt.Println("Salut")
    }

vous pouvez arrêter la boucle infini en utilisant le mot clé break

for {
        fmt.Println("Salut")
        break
    }

2) Le classique

Comme en javascript cet boucle tourneras jusqu’à ce que la value de i sois 9. la condition dans la deuxieme partie de la boucle doit être vrai.

for i := 0 ; i < 10; i++ {
    println(i)
}

3) for conditon

Une boucle qui continue de tourner tant que la condition est vrai. pas besoin de déclaration

for i < 10{
    println(i)
}

4) for range

Celui là est un peu spécial car il permet de faire des iterations sur des iterables comme des chaines de caracteres, des tranches, des tablaux ou des maps par examples.

	x := "apprendre go c'est génial"
	for i, v := range x {
		fmt.Printf("%d | %v\n", i, v)
	}

dans cet exemple nous itérons dans sur la variable x, i representant l’index et r la valeur dans ce cas une répresentations unicode du caractere, en go cela s’appel des runes.

	identite := map[string]string{
		"Nom":       "Curie",
		"Prenom":    "Marie",
		"DateNaissance": "7 novembre 1867",
		"LieuNaissance": "Varsovie, Pologne",
		"Nationalité":   "Française",
		"Profession":    "Physicienne et chimiste",
	}
	for _, v := range x {
		fmt.Printf("que les valeurs: %v\n", v)
	}

vous pouvez ignorer un des deux avec un petit _.

continue

func main() {
	grid := [][]string{
		{"apple", "banana", "cherry"},
		{"date", "elderberry", "fig"},
		{"grape", "honeydew", "kiwi"},
	}
	for _, row := range grid {
		for _, fruit := range row {
			// Si le fruit actuel contient la lettre 'e', on ignore le reste de cette itération
			if strings.Contains(fruit, "e") {
				continue
			}
			fmt.Println(fruit)
		}
	}
}

Le mot-clé continue sert à ignorer le reste du corps de la boucle en cours et à passer directement à l’itération suivante. Cependant, vous pouvez contrôler quelle boucle doit passer à l’itération suivante en nommant vos boucles, comme illustré ci-dessous :

func main() {
	grid := [][]string{
		{"apple", "banana", "cherry"},
		{"date", "elderberry", "fig"},
		{"grape", "honeydew", "kiwi"},
	}
outer:
	for _, row := range grid {
		for _, fruit := range row {
			if fruit == "date" {
				// Passe à l'itération suivante de la boucle extérieure
				continue outer
			}
			fmt.Println(fruit)
		}
	}
}

Infos

En Go, l’ordre des clés et des valeurs dans une map varie à chaque exécution pour des raisons de sécurité. Avant, l’ordre d’itération des clés était souvent le même, ce qui causait des erreurs imprévisibles et rendait possible une attaque Hash DoS. Pour éviter cela, Go utilise maintenant un algorithme de hachage avec un nombre aléatoire et fait varier l’ordre d’itération à chaque boucle.