Go による例: 範囲

range はさまざまなデータ構造の要素を反復処理します。これまでのデータ構造のいくつかを使って range の使い方を見てみましょう。

package main
import "fmt"
func main() {

ここで range を使ってスライスの数値を合計します。配列も同様に機能します。

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

配列とスライスの range は、各エントリのインデックスと値を両方提供します。上記の例ではインデックスは必要ないので、空の識別子 _ で無視しています。しかし、インデックスが実際に必要な場合があります。

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

Map の range は key/value ペアを反復処理します。

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

range は Map の key だけを反復処理することもできます。

    for k := range kvs {
        fmt.Println("key:", k)
    }

文字列の range は Unicode コードポイントを反復処理します。最初の値は ルーン の開始バイトインデックスで、2 番目の値は ルーン そのものです。詳細については 文字列とルーン を参照してください。

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

次の例: 関数