Le Go par l'exemple: Range

range itère sur les éléments de différents types de structures de données. Voyons comment utiliser range avec certaines des structures de données que nous avons déjà rencontré.

package main
import "fmt"

Ici on utilise range pour additionner les nombres d’une slice. Cela fonctionne de la même manière avec un array.

func main() {
    nums := []int{2, 3, 4}
    sum := 0
    for _, num := range nums {
        sum += num
    }
    fmt.Println("sum:", sum)

range sur les array et les slices fournit à la fois la clé et la valeur pour chaque entrée. Au dessus, nous n’avons pas besoin de la clé, donc nous l’avions ignoré avec l’identifieur blanc _. On a cependant parfois besoin de le récupérer.

    for i, num := range nums {
        if num == 3 {
            fmt.Println("index:", i)
        }
    }

range sur une map itère sur les paires clé/valeur.

    kvs := map[string]string{"a": "apple", "b": "banana"}
    for k, v := range kvs {
        fmt.Printf("%s -> %s\n", k, v)
    }

range sur une chaine itère sur les points de code Unicode. La première valeur est l’index de l’octet de départ de la rune, et le second la rune elle-même.

    for i, c := range "go" {
        fmt.Println(i, c)
    }
}
$ go run range.go 
sum: 9
index: 1
a -> apple
b -> banana
0 103
1 111

Exemple suivant: Fonctions.