Go言語のRange:初心者向けガイド

JavaScriptを有効にしてください

前書き

Go言語には、foreach文はありません。
そのかわりforeachループに相当するrangeキーワードがあります。
この記事では、Goのrangeを使用した繰り返し処理の基本的な使い方と、スライスやマップでの応用例を紹介します。

Rangeの基本構造

rangeキーワードは、スライス、マップ、または文字列などのコレクションを繰り返し処理するために使われます。
基本的な構文は以下の通りです。

go
1
2
3
for キー,  := range コレクション {
    // 繰り返し実行されるコード
}

range の動作

rangeの動作について例を用いて解説します。
この例では、スライスnumsの各要素にアクセスし、そのインデックスと値を出力します。

go
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
package main

import "fmt"

func main() {
	// 数値を含むスライスを作成
	nums := []int{10, 20, 30, 40, 50}

	// range を使ってスライスの各要素にアクセス
	for i, num := range nums {
		fmt.Printf("Index: %d, Value: %d\n", i, num)
	}
}
実行結果
1
2
3
4
5
Index: 0, Value: 10
Index: 1, Value: 20
Index: 2, Value: 30
Index: 3, Value: 40
Index: 4, Value: 50

inumはそれぞれ下記の情報が代入されます。

  • iスライスのインデックス(位置)
  • numそのインデックスにある値

上記の、nums := []int{10, 20, 30, 40, 50} の場合:

インデックス (i) 値 (num)
0 10
1 20
2 30
3 40
4 50

このデータが for ループの中で順番に処理されます。

range の役割

上記の for 文の range を使った部分:

go
1
for i, num := range nums {

は、Go での 配列やスライスの各要素を繰り返し処理 するための典型的な書き方です。

range の使い方(応用)

① インデックスを使わない場合

インデックスが不要な場合は、_(アンダースコア)を使います:

go
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
package main

import "fmt"

func main() {
	// 数値を含むスライスを作成
	nums := []int{10, 20, 30, 40, 50}

	// range を使ってスライスの各要素にアクセス
    // インデックスは使わないため、アンダースコアを使用
	for _, num := range nums {
		fmt.Println(num) // 値だけを出力
	}
}
実行結果
1
2
3
4
5
10
20
30
40
50

② インデックスだけを使う場合

値が不要でインデックスだけを使う場合:

go
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
package main

import "fmt"

func main() {
	// 数値を含むスライスを作成
	nums := []int{10, 20, 30, 40, 50}

	// range を使ってスライスの各要素にアクセス
    // 値を使用しない場合はアンダースコアを使用しなくてもOK
	for i := range nums {
		fmt.Println(i) // インデックスのみ出力
	}
}
実行結果
1
2
3
4
5
0
1
2
3
4

マップでの使用例

go
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
package main

import "fmt"

func main() {
	colors := map[string]string{"red": "#ff0000", "green": "#00ff00", "blue": "#0000ff"}
	for key, value := range colors {
		fmt.Printf("Key: %s, Value: %s\n", key, value)
	}
}
実行結果
1
2
3
Key: red, Value: #ff0000
Key: green, Value: #00ff00
Key: blue, Value: #0000ff

この例では、マップcolorsの各要素に対してキーと値を出力します。
mapの使い方については下記記事をお読みください。
Go言語におけるmapの使い方

Rangeの柔軟性

rangeはスライス、マップだけでなく、文字列にも使用できます。
文字列では各文字に対する繰り返し処理が可能です。

文字列での使用例

go
1
2
3
4
5
6
7
8
9
package main

import "fmt"

func main() {
	for index, char := range "hello" {
		fmt.Printf("Index: %d, Character: %c\n", index, char)
	}
}
実行結果
1
2
3
4
5
Index: 0, Character: h
Index: 1, Character: e
Index: 2, Character: l
Index: 3, Character: l
Index: 4, Character: o

この例では、文字列"hello"の各文字を出力します。

まとめ

Goのrangeキーワードは、コレクションの要素を効率的に繰り返し処理するための強力なツールです。
スライス、マップ、文字列など、さまざまな型のコレクションを簡単に処理でき、Goプログラミングにおける繰り返し処理の基本となります。


スポンサーリンク

共有

もふもふ
著者
もふもふ
プログラマ。汎用系→ゲームエンジニア→Webエンジニア→QAエンジニア