カテゴリ: Go言語 更新日: 2025/12/06

Go言語のfor-rangeループを短く書くコツと便利な活用例

Go言語のfor-rangeループを短く書くコツと便利な活用例
Go言語のfor-rangeループを短く書くコツと便利な活用例

先生と生徒の会話形式で理解しよう

生徒

「Go言語のfor文って、配列やスライスをくり返し処理するのに使えるって聞きました。でも書き方が長くなってしまって大変です…」

先生

「それならfor-rangeという便利な書き方を覚えると、とても簡単になりますよ。」

生徒

「どうやって書けばいいんですか?できれば短く書けるコツや、どんな使い方があるのかも知りたいです!」

先生

「では今回は、Go言語のfor-rangeループの使い方と、簡単に書くコツ、それから便利な活用例までしっかり説明しますね!」

1. Go言語のfor-rangeとは?

1. Go言語のfor-rangeとは?
1. Go言語のfor-rangeとは?

Go言語のfor-rangeは、スライス(配列のようなもの)や配列マップ(辞書のようなもの)、文字列などを1つずつ順番に処理するときに使える、とても便利な書き方です。

普通のfor文よりも、コードが短くて見やすくなるのが特徴です。

2. for-rangeの基本的な書き方

2. for-rangeの基本的な書き方
2. for-rangeの基本的な書き方

スライス(数字の集まりなど)をfor-rangeで1つずつ取り出す基本的な例を見てみましょう。


numbers := []int{10, 20, 30}

for index, value := range numbers {
    fmt.Println(index, value)
}

rangeは、「ひとつずつ取り出す」という意味です。上のコードでは、numbersの中にある数字を、1つずつ取り出してvalueに入れています。そしてindexには、その位置(番号)が入ります。


0 10
1 20
2 30

3. インデックスを使わないときは「_(アンダースコア)」を使おう

3. インデックスを使わないときは「_(アンダースコア)」を使おう
3. インデックスを使わないときは「_(アンダースコア)」を使おう

ときどき、位置(index)は使わずに、値だけ使いたいときがあります。そのときは、アンダースコア _ を使うことで、省略できます。


fruits := []string{"りんご", "みかん", "バナナ"}

for _, fruit := range fruits {
    fmt.Println(fruit)
}

りんご
みかん
バナナ

_は「ここに入った情報は使わない」という意味になります。

4. 値を使わずにインデックスだけ使いたいとき

4. 値を使わずにインデックスだけ使いたいとき
4. 値を使わずにインデックスだけ使いたいとき

逆に、値は使わずに位置だけ使いたい場合もあります。そのときも、_を使って書けます。


names := []string{"A", "B", "C"}

for i, _ := range names {
    fmt.Println("番号:", i)
}

Go1.11以降では、下のようにさらに短く書くこともできます。


for i := range names {
    fmt.Println("番号:", i)
}

5. 文字列を1文字ずつ処理するときの使い方

5. 文字列を1文字ずつ処理するときの使い方
5. 文字列を1文字ずつ処理するときの使い方

for-rangeは、文字列に使うこともできます。1文字ずつ取り出して処理できます。


message := "こんにちは"

for _, ch := range message {
    fmt.Println(string(ch))
}

こ
ん
に
ち
は

1文字ずつ取り出すときは、string(ch)で文字として出力しています。rune型(文字の番号)なので、文字に変換する必要があるのです。

6. マップ(連想配列)でキーと値を取り出す

6. マップ(連想配列)でキーと値を取り出す
6. マップ(連想配列)でキーと値を取り出す

マップとは、「名前」と「電話番号」のように、キーのセットを保存するための型です。for-rangeを使えば、それも簡単に処理できます。


phoneBook := map[string]string{
    "田中": "090-1111-2222",
    "佐藤": "080-3333-4444",
}

for name, number := range phoneBook {
    fmt.Println(name, number)
}

田中 090-1111-2222
佐藤 080-3333-4444

7. for-rangeをもっと短く・簡単に書くコツ

7. for-rangeをもっと短く・簡単に書くコツ
7. for-rangeをもっと短く・簡単に書くコツ
  • 位置(インデックス)がいらないとき → for _, v := range data
  • 値がいらないとき → for i := range data
  • for-rangeは、スライス・配列・マップ・文字列に使える
  • アンダースコア(_)で使わない部分をスキップ

これらを使いこなすと、Go言語のコードをより短く、読みやすく書くことができます。

まとめ

まとめ
まとめ

Go言語で毎日のように登場するfor-rangeは、配列やスライス、マップや文字列といった多様なデータ構造をひとつずつ取り出して処理するための非常に便利な構文です。今回の解説では、このfor-rangeをより短く書く工夫や、初心者がつまずきやすいインデックスと値の扱い方、アンダースコアの使い方、文字列処理の特徴、マップでのキーと値の取り扱いなど、実務でも役立つ使い方を丁寧に整理しました。

Go言語の学習を始めたばかりの段階では、スライスの要素を順番に処理したり、マップからキーと値を取り出したりするだけでもしっかりと理解するには時間がかかることがあります。しかし、for-rangeを使えば、毎回複雑なカウンタ変数を用意したり、要素数を意識した細かなコードを書く必要がなくなり、読みやすくミスの少ないコードを書くことができます。

特に便利なのがアンダースコア「_」です。使わないインデックスや値を明確に「使いません」と示すことで、可読性が向上しコードの意図も伝わりやすくなります。たとえばスライスの中身だけ必要な場合はfor _, v := range itemsのように書き、位置が不要ならアンダースコアを使い、値が不要ならfor i := range itemsのようにより短い書き方で処理できます。

また、文字列を1文字ずつ処理したい場面でもfor-rangeは活躍します。Go言語では文字がrune(Unicodeコードポイント)として扱われるため、出力時にstring(ch)のように文字列型へ変換する必要がありますが、この仕組みを理解しておくと、日本語や絵文字などマルチバイト文字を扱う際にも安心して処理できます。

マップをfor-rangeで処理するときには、キーと値をセットで取り出せるという強みがあります。電話帳、辞書データ、各種設定値などを扱うときに非常に役立つため、スライスや配列とあわせて覚えておくと実務的なコーディングにも応用できます。

以下は、今回学んだ内容を応用して、スライス・マップ・文字列を組み合わせて処理するサンプルプログラムです。for-rangeの便利さがより実感できる例になっています。


package main

import "fmt"

func main() {
    fruits := []string{"りんご", "みかん", "バナナ"}

    for i, fruit := range fruits {
        fmt.Println(i, fruit)
    }

    message := "ありがとう"
    for _, ch := range message {
        fmt.Println(string(ch))
    }

    prices := map[string]int{
        "りんご": 120,
        "みかん": 80,
        "バナナ": 150,
    }

    for name, price := range prices {
        fmt.Println(name, price)
    }
}

このように、for-rangeを活用すると、複数の異なるデータ型でも共通の書き方で処理できるため、Go言語のコードはより統一感が生まれ、読みやすく整った形になります。複雑なロジックもfor-rangeを上手に使うことでスッキリと表現できるため、学び始めの段階でしっかり身につけておくと、後の開発がとても楽になります。

コード量を減らしつつ意味を分かりやすく伝えることは、プログラミングでは重要な考え方です。今回のfor-rangeの学習を通じて、繰り返し処理の基礎だけでなく、Go言語特有の書き方に対する感覚も身につけられるはずです。これからGo言語での開発を進めるうえで必ず役に立つ知識ですから、何度も手を動かしながら慣れていきましょう。

先生と生徒の振り返り会話

生徒

「for-rangeがここまで便利だとは思いませんでした。特にアンダースコアを使って短く書けるところが良かったです!」

先生

「そうですね。Go言語はシンプルで読みやすいコードを書くことが大切なので、for-rangeはまさにその考え方に合っています。インデックスや値を使い分けるのもポイントですよ。」

生徒

「文字列を1文字ずつ処理できるのも便利でした。最初はruneって何だろうと思っていましたが、仕組みがわかると納得できますね。」

先生

「その通りです。マップでキーと値をまとめて取り出せるのも覚えておくと、実際のアプリ開発でも役に立ちますよ。これからも繰り返し実践しながら慣れていきましょう。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

Go言語のfor文とfor-range文の違いは何ですか?

Go言語のfor文は自分でカウンタや条件を指定する必要がありますが、for-range文はスライスや配列、マップ、文字列などを簡単に繰り返し処理できる構文で、より短く読みやすく書けます。
カテゴリの一覧へ
新着記事
Go言語の構造体でインターフェースを実装する方法を初心者向けにやさしく解説!
Kotlinの演算子一覧と使い方!算術・比較・論理演算子の基本を解説
Go言語の文字列フォーマット!fmt.Sprintfで簡単に出力を整形する方法
Go言語のエラーと例外の違いを初心者向けに整理!わかりやすく解説
人気記事
No.1
Kotlin・Go・Swift記事の人気No1
Swiftのwhile文とrepeat while文を完全マスター!初心者にもわかる繰り返し処理の使い方と違い
No.2
Kotlin・Go・Swift記事の人気No2
Swift入門ガイド|基本構文と書き方をマスターしよう
No.3
Kotlin・Go・Swift記事の人気No3
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.4
Kotlin・Go・Swift記事の人気No4
Kotlinの正規表現(Regex)の使い方をやさしく解説!文字列操作の基本を初心者向けに学ぼう
No.5
Kotlin・Go・Swift記事の人気No5
Kotlinのコンパニオンオブジェクトとは?初心者向けに使い方と役割をわかりやすく解説!
No.6
Kotlin・Go・Swift記事の人気No6
Kotlinで画面を作る!レイアウトXMLとビューの基本操作をやさしく解説
No.7
Kotlin・Go・Swift記事の人気No7
Kotlinのwhen式を完全ガイド!初心者でもわかるパターンマッチング的な使い方
No.8
Kotlin・Go・Swift記事の人気No8
Swiftのオプショナル型とは?初心者でもわかる使い方とアンラップの基礎