プログラミング

Go言語のforループ解説

Go言語におけるforループは、非常に強力で柔軟な制御構造です。forループはGoの主要な反復処理方法であり、他の多くのプログラミング言語で見られるwhiledo-whileループに相当する機能も兼ね備えています。この記事では、Goのforループの構文、使い方、そしていくつかの実用的な例について詳しく解説します。

1. forループの基本構文

Go言語におけるforループは、次のような基本的な構文を持ちます:

go
for 初期化; 条件式; 増減式 { // ループ内で実行する処理 }

ここで、各部分の意味は次の通りです:

  • 初期化:ループの開始時に実行されるコード。通常、変数の初期化に使用します。
  • 条件式:この条件がtrueの間、ループが繰り返し実行されます。falseになるとループは終了します。
  • 増減式:ループの各反復後に実行されるコード。通常、インデックス変数を増加または減少させます。

2. 基本的なforループの例

次に、Go言語の基本的なforループを実際に見てみましょう。以下の例では、1から5までの整数を出力するプログラムを示します。

go
package main import "fmt" func main() { for i := 1; i <= 5; i++ { fmt.Println(i) } }

出力結果は次のようになります:

1 2 3 4 5

このコードでは、iという変数を1から5までカウントアップしています。i++はインクリメント操作を行っており、ループが繰り返されるごとにiが1増加します。

3. 無限ループ

Goのforループは無限ループも簡単に作成できます。条件式を省略すると、常にtrueと見なされ、無限にループが繰り返されます。以下にその例を示します:

go
package main import "fmt" func main() { for { fmt.Println("無限ループ中") } }

このコードを実行すると、「無限ループ中」というメッセージが永遠に出力され続けます。このような無限ループを使用する場合は、break文を使ってループを終了させる必要があります。

4. forループの条件式を省略する

Goでは、forループの初期化条件式増減式のどれも省略することができます。例えば、次のように書くことも可能です:

go
package main import "fmt" func main() { i := 1 for i <= 5 { fmt.Println(i) i++ } }

この場合、初期化はループの前で行い、増減式はループ内で手動で行います。条件式もループの外に出ており、i <= 5が満たされる限りループが続きます。

5. breakcontinueによる制御

Goのforループには、breakcontinueという制御フローを変更する命令があります。

  • break:ループを完全に終了します。
  • continue:現在の反復をスキップし、次の反復に進みます。

以下は、breakcontinueを使用した例です:

go
package main import "fmt" func main() { for i := 1; i <= 5; i++ { if i == 3 { continue // iが3の場合、スキップして次のループに進む } if i == 4 { break // iが4の場合、ループを終了 } fmt.Println(i) } }

このコードの出力は次のようになります:

1 2

i == 3のときにcontinueが実行され、i == 4のときにbreakが実行されるため、3と4は出力されません。

6. forループと配列・スライス

Goのforループは配列やスライスとともに使うと非常に便利です。配列やスライスをループで処理する際には、インデックスと値を同時に取得することができます。

go
package main import "fmt" func main() { numbers := []int{1, 2, 3, 4, 5} for i, num := range numbers { fmt.Printf("インデックス: %d, 値: %d\n", i, num) } }

出力結果:

makefile
インデックス: 0, 値: 1 インデックス: 1, 値: 2 インデックス: 2, 値: 3 インデックス: 3, 値: 4 インデックス: 4, 値: 5

このように、rangeを使用することで、配列やスライスのインデックスとその要素を同時に取得できます。

7. forループとマップ

Goではマップ(連想配列)もforループを使って反復処理できます。マップのrangeを使って、キーと値を取り出すことができます。

go
package main import "fmt" func main() { person := map[string]int{"Alice": 25, "Bob": 30, "Charlie": 35} for name, age := range person { fmt.Printf("名前: %s, 年齢: %d\n", name, age) } }

出力結果:

makefile
名前: Alice, 年齢: 25 名前: Bob, 年齢: 30 名前: Charlie, 年齢: 35

まとめ

Goのforループは、非常に強力で柔軟な制御構造です。基本的な使い方から始まり、無限ループ、breakcontinueの使用方法、配列やスライス、マップの反復処理まで幅広く対応しています。これを活用することで、効率的で可読性の高いコードを書くことができます。

Back to top button