1 ループ文の概要

Go言語では、ループ文を使用してコードブロックを複数回実行することができます。特定の操作を繰り返し実行する必要がある場合、ループ文は非常に役立ちます。たとえば、配列内の要素を反復処理したり、特定の条件が満たされるまで操作を繰り返したりすることがあります。Go言語では、ループ文は主にforキーワードを使用して実装されます。これはGo言語で唯一のループ文です。効率的でメンテナンスしやすいコードを書くためには、ループ文の正しい使用が重要です。

2 forループの基礎

2.1 forループの構造

Go言語におけるforループは、以下の3つの部分で構成されています。

  1. 初期化文: 最初の反復の前に実行され、通常はループカウンタの宣言に使用されます。
  2. 条件式: 各反復の前に評価されます。条件がtrueの場合、ループ本体が実行されます。
  3. 後処理文: それぞれの反復のコードブロックの後に実行され、通常はループカウンタを更新するために使用されます。

forループの構文は以下のようになります:

for 初期化文; 条件式; 後処理文 {
    // ループ本体のコード
}

2.2 forループの単純な例

単純な例を通じて、forループの実行プロセスを理解しましょう。

package main

import "fmt"

func main() {
    for i := 0; i < 5; i++ {
        fmt.Println("iの値は:", i)
    }
}

この例では、変数i0で初期化されます。forループは条件i < 5trueかどうかを確認します。条件が真の場合、ループ本体が実行され、iの値が出力されます。ループ本体を実行した後、iの値はi++(インクリメント操作)で更新され、そしてiの値が5になるまで条件を確認し続け、それを満たすと条件がfalseとなりforループが終了します。

2.3 その他のforループの例

Go言語のforループは非常に柔軟であり、さまざまな形式で記述することができます。

2.3.1 無限ループ

Go言語では、forループの初期化文、条件式、後処理文を省略して、break文または関数からの戻り値によって終了するまで実行される無限ループを作成することができます。

for {
    // 無限ループ内のコード
    if someCondition {
        break // 特定の条件が満たされた際にループを終了
    }
}

2.3.2 条件のみのループ

Go言語では、条件のみを含むforループを使用することもできます。これは他のプログラミング言語のwhileループに似ています。

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

上記のコードは0から4までを出力し、n5になるとループが終了します。

2.3.3 配列やスライスを反復処理

Go言語では、rangeキーワードを使用して配列やスライスの各要素を反復処理することができます。

items := []int{1, 2, 3, 4, 5}
for index, value := range items {
    fmt.Printf("インデックス: %d, 値: %d\n", index, value)
}

上記のコードは各要素のインデックスと値を出力します。要素の値のみを必要とする場合は、インデックスを無視するために_を使用することができます。

for _, value := range items {
    fmt.Printf("値: %d\n", value)
}

注意: 配列の使用方法については後続の章で詳しく説明します。この部分が理解できなくても、forループがこのように使用できることを理解していれば問題ありません。

2.3.4 マップをループする

マップを繰り返し処理する際、forループとrange式の組み合わせは非常に強力です。これにより、マップのそれぞれのキーと値を取得できます。

colors := map[string]string{"red": "#ff000", "green": "#00ff00", "blue": "#000ff"}
for key, value := range colors {
    fmt.Printf("Key: %s, Value: %s\n", key, value)
}

この例では、colorsマップ内のすべてのキーとそれに対応する値を出力しています。スライスを繰り返し処理するのと同様に、キーまたは値のみが必要な場合は、他の要素を無視することもできます。

注意:マップの使用方法は後続の章で詳しく説明します。この部分が理解できなくても大丈夫です。forループがこのように使用できることさえ理解できれば問題ありません。

3 ループの制御

3.1 break を使用してループを終了する

特定の条件が満たされたときにループを途中で終了する必要がある場合、break文を使用できます。以下は、breakを使用してループを終了する例です:

package main

import "fmt"

func main() {
    for i := 0; i < 10; i++ {
        if i == 5 {
            break // iが5に等しいときにループを終了
        }
        fmt.Println("iの値は:", i)
    }
    // 出力には0から4の値のみ含まれます
}

3.2 continue を使用してイテレーションをスキップする

特定の状況では、現在のイテレーションをスキップして次のイテレーションに移る必要があります。これはcontinue文を使用することで実現できます。以下はその例です:

package main

import "fmt"

func main() {
    for i := 0; i < 10; i++ {
        if i%2 != 0 {
            continue // iが奇数の場合にこのイテレーションをスキップ
        }
        fmt.Println("偶数:", i)
    }
}