Go 言語の range キーワードを探る

Beginner

This tutorial is from open-source community. Access the source code

はじめに

range キーワードは、Go 言語でさまざまなデータ構造の要素を反復処理するために使用されます。この実験では、さまざまなデータ構造で range を使用する方法を探ります。

Range

この実験で解決する問題は、スライス、配列、マップ、および文字列で range を使用する方法を示すことです。

この実験を完了するには、以下が必要です。

  • Go 言語の構文に関する基本的な知識
  • あなたのマシンに Go 言語がインストールされていること
$ go run range.go
sum: 9
index: 1
a - > apple
b - > banana
key: a
key: b
0 103
1 111

以下に完全なコードがあります。

// _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)
		}
	}

	// マップでの `range` は、キー/値のペアを反復処理します。
	kvs := map[string]string{"a": "apple", "b": "banana"}
	for k, v := range kvs {
		fmt.Printf("%s -> %s\n", k, v)
	}

	// `range` は、マップのキーだけを反復処理することもできます。
	for k := range kvs {
		fmt.Println("key:", k)
	}

	// 文字列での `range` は、Unicode コードポイントを反復処理します。
	// 最初の値は `rune` の開始バイトインデックスで、2 番目の値は `rune` 自体です。
	// 詳細については、[Strings and Runes](strings-and-runes) を参照してください。
	for i, c := range "go" {
		fmt.Println(i, c)
	}
}

まとめ

この実験では、Go 言語においてスライス、配列、マップ、および文字列で range を使用する方法を学びました。range キーワードは、さまざまなデータ構造の要素を反復処理するための便利な方法を提供します。