Go言語でループ処理を実装する方法

Go言語でループ処理を実装する方法

Go言語では、ループ処理を実装する方法として、主にforループを使用します。
Go言語にはwhileループやdo-whileループは存在せず、すべてのループ処理はfor文を使用して記述します。
ここでは、forループの基本的な使い方や、さまざまな形式について説明します。

基本的なforループ

Go言語での最も基本的なループは、C言語やJavaなどと同様のforループです。
以下のように記述します。

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

このコードでは、変数iが0から始まり、i < 10の条件が満たされている限りループが実行されます。
ループの各反復でiの値が1ずつ増加し、その値が標準出力に表示されます。

条件付きループ

条件付きループを使いたい場合は、forループの初期化部分と後処理部分を省略して、条件式だけを指定することができます。
以下にその例を示します。

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

この場合、forループはi < 10という条件がtrueの間繰り返されます。
ループの内部でiが増加することで、条件が変わりループが終了します。

無限ループ

無限ループを実装するには、条件式を常にtrueに設定します。
無限ループは通常、break文で手動で終了させる必要があります。
以下のように記述します。

for {
  fmt.Println("This is an infinite loop")
  // 何らかの条件でループを終了する
  if someCondition {
    break
  }
}

このコードでは、forループの条件が指定されていないため、無限にループが続きます。
someConditionがtrueになった場合にbreak文が実行され、ループが終了します。

範囲を使ったループ

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

numbers := []int{1, 2, 3, 4, 5}
for index, value := range numbers {
  fmt.Println("Index:", index, "Value:", value)
}

このコードでは、numbersスライスの各要素に対して、indexとvalueの両方を取得して処理します。
rangeを使用することで、配列やスライスの要素とそのインデックスに簡単にアクセスできます。

マップのループ

マップをループする際もrangeを使用します。
マップのキーと値のペアにアクセスできます。

myMap := map[string]int{"apple": 1, "banana": 2, "cherry": 3}
for key, value := range myMap {
  fmt.Println("Key:", key, "Value:", value)
}

このコードでは、myMapの各キーと値のペアを取り出して処理しています。
マップの場合、キーの順序は保証されていないため、ループの順序も一定ではありません。

ループ制御

ループ内で特定の条件に応じてループを続行または終了させるために、continueやbreak文を使用できます。
continueはループの次の反復に移行し、breakはループを完全に終了させます。

for i := 0; i < 10; i++ {
  if i%2 == 0 {
    continue  // 偶数はスキップ
  }
  fmt.Println(i)
}

このコードでは、iが偶数の場合はcontinue文によって現在のループの反復をスキップし、奇数の場合にのみfmt.Printlnが呼ばれます。

Go言語のforループは、シンプルでありながら強力なループ制御を提供し、さまざまな条件や状況に応じて柔軟に対応することができます。