Go Différentes formes de For Loop


Exemple

Forme simple utilisant une variable:

for i := 0; i < 10; i++ {
    fmt.Print(i, " ")
}

En utilisant deux variables (ou plus):

for i, j := 0, 0; i < 5 && j < 10; i, j = i+1, j+2 {
    fmt.Println(i, j)
}

Sans utiliser l'instruction d'initialisation:

i := 0
for ; i < 10; i++ {
    fmt.Print(i, " ")
}

Sans expression de test:

for i := 1; ; i++ {
    if i&1 == 1 {
        continue
    }
    if i == 22 {
        break
    }
    fmt.Print(i, " ")
}

Sans expression d'incrément:

for i := 0; i < 10; {
    fmt.Print(i, " ")
    i++
}

Lorsque toutes les trois expressions d'initialisation, de test et d'incrémentation sont supprimées, la boucle devient infinie:

i := 0
for {
    fmt.Print(i, " ")
    i++
    if i == 10 {
        break
    }
}

Voici un exemple de boucle infinie avec compteur initialisé à zéro:

for i := 0; ; {
    fmt.Print(i, " ")
    if i == 9 {
        break
    }
    i++
}

Lorsque seule l'expression de test est utilisée (agit comme une boucle while typique):

i := 0
for i < 10 {
    fmt.Print(i, " ")
    i++
}

En utilisant uniquement l'expression d'incrémentation:

i := 0
for ; ; i++ {
    fmt.Print(i, " ")
    if i == 9 {
        break
    }
}

Itérer sur une plage de valeurs en utilisant un index et une valeur:

ary := [5]int{0, 1, 2, 3, 4}
for index, value := range ary {
    fmt.Println("ary[", index, "] =", value)
}

Itérer sur une plage en utilisant juste l'index:

for index := range ary {
    fmt.Println("ary[", index, "] =", ary[index])
}

Itérer sur une plage en utilisant juste l'index:

for index, _ := range ary {
    fmt.Println("ary[", index, "] =", ary[index])
}

Itérer sur une plage en utilisant simplement la valeur:

for _, value := range ary {
    fmt.Print(value, " ")
}

Itérer sur une plage en utilisant la clé et la valeur pour la carte (peut ne pas être dans l'ordre):

mp := map[string]int{"One": 1, "Two": 2, "Three": 3}
for key, value := range mp {
    fmt.Println("map[", key, "] =", value)
}

Itérer sur une plage en utilisant simplement la touche pour la carte (peut ne pas être dans l'ordre):

for key := range mp {
    fmt.Print(key, " ") //One Two Three
}

Itérer sur une plage en utilisant simplement la touche pour la carte (peut ne pas être dans l'ordre):

for key, _ := range mp {
    fmt.Print(key, " ") //One Two Three
}

Itérer sur une plage en utilisant juste la valeur pour la carte (peut ne pas être dans l'ordre):

for _, value := range mp {
    fmt.Print(value, " ") //2 3 1
}

Itérer sur une plage pour les canaux (quitte si le canal est fermé):

ch := make(chan int, 10)
for i := 0; i < 10; i++ {
    ch <- i
}
close(ch)

for i := range ch {
    fmt.Print(i, " ")
}

Itérer sur une plage pour la chaîne (donne les points de code Unicode):

utf8str := "B = \u00b5H" //B = µH
for _, r := range utf8str {
    fmt.Print(r, " ") //66 32 61 32 181 72
}
fmt.Println()
for _, v := range []byte(utf8str) {
    fmt.Print(v, " ") //66 32 61 32 194 181 72
}
fmt.Println(len(utf8str)) //7

comme vous le voyez, utf8str a 6 runes (points de code Unicode) et 7 octets.