#6 Goで学ぶループの基本

Goのループには、他の言語のように複数の種類が存在せず、forだけですべての繰り返しを表現するという、シンプルな設計思想があります。この記事では、Goにおけるループの基本を解説します。

forだけですべて表現する

Goにはwhileという単語が存在せず、条件による繰り返しもforで書きます。

count := 0
for count < 5 {
    fmt.Println(count)
    count++
}

C言語風の書き方も可能

もちろん、初期値・条件・更新をまとめて書く、なじみのある書き方もできます。

for i := 0; i < 5; i++ {
    fmt.Println(i)
}

無限ループとbreak

条件を何も書かなければ、無限に繰り返すforになります。抜け出すにはbreakを使います。

count := 0
for {
    fmt.Println(count)
    count++
    if count >= 5 {
        break
    }
}

特定の条件のときだけ処理をスキップしたい場合はcontinueが使えます。

rangeを使った繰り返し

配列やスライス(可変長のリストのようなもの)の中身を順番に処理したい場合は、rangeという書き方を使います。

fruits := []string{"りんご", "みかん", "ぶどう"}
for i, fruit := range fruits {
    fmt.Println(i, fruit)
}

rangeは、位置(添字)と値の両方を同時に取り出せるのが特徴です。添字が不要な場合は、アンダースコア_を使って無視できます。

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

ネストしたループから抜ける

二重ループの内側から、外側のループごと一気に抜けたい場合は、ループにラベルを付ける書き方が使えます。

outer:
for i := 0; i < 3; i++ {
    for j := 0; j < 3; j++ {
        if i == 1 && j == 1 {
            break outer
        }
        fmt.Println(i, j)
    }
}

ラベル無しのbreakは、それを直接囲んでいる内側のループしか抜けられないため、多重ループの外側までまとめて抜けたい場面ではラベルが役立ちます。

Goならではの注意点

他の言語の経験がある人は、「whileはどこにあるのか」と探してしまいがちですが、Goでは条件だけを書いたforがその役割を兼ねています。「繰り返しはすべてfor」という考え方を最初に理解しておくと、混乱を避けられます。また、rangeで不要な変数を_で無視する書き方は、Goのさまざまな場面で登場する重要なイディオムなので、早めに慣れておきましょう。

まとめ

Goのループはforひとつに統一されています。書き方のバリエーション(条件のみ・3要素・無限ループ・range)を状況に応じて使い分け、多重ループから一気に抜けたいときはラベル付きbreakも活用しましょう。


本ページはプロモーションを含みます。

参考書籍(PR)

Goをもっと学びたい方には「Go言語入門」がおすすめです。


PR

コードを書かずに自動化したい方へ

「学んだけど自分の作業に組み込む時間がない」という方向けに、ダブルクリックで動く Windows専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。

コメント

このブログの人気の投稿

#25 Rustで学ぶAI API(ChatGPT等)の呼び出し方の基本

#8 C++で学ぶ文字列操作の基本

#16 TypeScriptで学ぶ辞書型(マップ)の基本