NU:LOGiC Logo

【Go言語】forによるループ処理|while文やforEach文のような処理の実装方法も解説

【Go言語】forによるループ処理|while文やforEach文のような処理の実装方法も解説

Go言語での繰り返し処理について詳しく解説します。繰り返し処理はプログラミングの基本中の基本ですが、Go言語ではいくつか独自の書き方があります。

3行で要約すると

  • Go言語には繰り返し処理はforループしかない。
  • Go言語のforループは柔軟で、変数操作や条件指定の他に、while風の条件式指定やrangeを用いた要素処理も可能で、ループ制御も可能。
  • Go言語のforループはシンプルかつ多機能で、効果的な繰り返し処理を提供します。

基本的なforループ

Go言語のforループはこのような形です。

for 初期化ステートメント; 条件式; 後処理 {
    // 処理
}

インクリメントの自由度

後処理でi++の代わりにi += 2i--なども使えます。

for i := 0; i < 10; i += 2 {
    fmt.Println(i) // 0, 2, 4, 6, 8
}

複数の変数でループ

複数の変数でループも可能です。

for i, j := 0, 10; i < j; i++, j-- {
    fmt.Println(i, j)
}

条件式だけを指定する: while文のような使い方

forループで条件式だけを指定すると、while文のように振る舞います。

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

配列やスライスを繰り返す: forEach的な使い方

rangeを使えば、配列やスライス、マップの各要素を簡単に処理できます。

numbers := []int{0, 1, 2, 3, 4}
for i, num := range numbers {
    fmt.Printf("index: %d, value: %d\n", i, num)
}

値だけ取得する

for _, num := range numbers {
    fmt.Println("value:", num)
}

インデックスだけ取得する

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

breakとcontinueで制御

breakでループを抜け、continueで次のループに進みます。

for i := 0; i < 10; i++ {
    if i == 5 {
        break
    }
    if i%2 == 0 {
        continue
    }
    fmt.Println(i)
}

ラベルを用いた複数のループ制御

breakcontinueにラベルをつけることで、複数のネストされたループを一度に制御できます。

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

無限ループ

特定の条件下で必要な場合以外、無限ループは避けましょう。

for {
    // 無限ループ
}

まとめ

Go言語での繰り返し処理は非常に柔軟です。シンプルだけど多機能、それがGo言語のforループです。