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

gofor 初期化; 条件式; 増減式 {
// ループ内で実行する処理
}
ここで、各部分の意味は次の通りです:
- 初期化:ループの開始時に実行されるコード。通常、変数の初期化に使用します。
- 条件式:この条件が
true
の間、ループが繰り返し実行されます。false
になるとループは終了します。 - 増減式:ループの各反復後に実行されるコード。通常、インデックス変数を増加または減少させます。
2. 基本的なfor
ループの例
次に、Go言語の基本的なfor
ループを実際に見てみましょう。以下の例では、1から5までの整数を出力するプログラムを示します。
gopackage 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
と見なされ、無限にループが繰り返されます。以下にその例を示します:
gopackage main
import "fmt"
func main() {
for {
fmt.Println("無限ループ中")
}
}
このコードを実行すると、「無限ループ中」というメッセージが永遠に出力され続けます。このような無限ループを使用する場合は、break
文を使ってループを終了させる必要があります。
4. for
ループの条件式を省略する
Goでは、for
ループの初期化
、条件式
、増減式
のどれも省略することができます。例えば、次のように書くことも可能です:
gopackage main
import "fmt"
func main() {
i := 1
for i <= 5 {
fmt.Println(i)
i++
}
}
この場合、初期化
はループの前で行い、増減式
はループ内で手動で行います。条件式
もループの外に出ており、i <= 5
が満たされる限りループが続きます。
5. break
とcontinue
による制御
Goのfor
ループには、break
とcontinue
という制御フローを変更する命令があります。
break
:ループを完全に終了します。continue
:現在の反復をスキップし、次の反復に進みます。
以下は、break
とcontinue
を使用した例です:
gopackage 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
ループは配列やスライスとともに使うと非常に便利です。配列やスライスをループで処理する際には、インデックスと値を同時に取得することができます。
gopackage 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
を使って、キーと値を取り出すことができます。
gopackage 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
ループは、非常に強力で柔軟な制御構造です。基本的な使い方から始まり、無限ループ、break
やcontinue
の使用方法、配列やスライス、マップの反復処理まで幅広く対応しています。これを活用することで、効率的で可読性の高いコードを書くことができます。