forの概要
ループ処理 Goの予約語 | ||
for 概要 |
||
|
基本的なforループの使い方
for
ループを使って、1から5までの数値を出力する基本的な例です。
package main
import "fmt"
func main() {
for i := 1; i <= 5; i++ {
fmt.Println(i)
}
}
解説:
i := 1
で初期化し、i <= 5
の条件が成り立つ間ループを実行。- 各ループの最後に
i++
でi
を1増やす。
実行結果:
1 2 3 4 5
whileのように使うforループ
Goにはwhile
が存在しないため、条件のみを指定するfor
を使ってwhile
のようなループを実現できます。
package main
import "fmt"
func main() {
i := 1
for i <= 5 {
fmt.Println(i)
i++
}
}
解説:
- 初期値
i := 1
をループの外で定義。 - 終了条件
i <= 5
のみを指定して、条件が満たされる間ループを実行。
実行結果:
1 2 3 4 5
無限ループ
Goでは、for
の後に何も書かないと無限ループになります。
package main
import "fmt"
func main() {
count := 0
for {
fmt.Println("無限ループ")
count++
if count == 3 {
break // 3回で終了
}
}
}
解説:
for
の後に条件がないため、無限ループになる。break
を使って、ループを手動で抜ける。
実行結果:
無限ループ 無限ループ 無限ループ
rangeを使ったforループ
for
とrange
を組み合わせると、スライスやマップの要素を簡単にループできます。
package main
import "fmt"
func main() {
numbers := []int{10, 20, 30, 40}
for index, value := range numbers {
fmt.Printf("インデックス: %d, 値: %d\n", index, value)
}
}
解説:
range numbers
を使うと、スライスの各要素を順番に処理できる。index
にはインデックスが、value
には要素の値が入る。
実行結果:
インデックス: 0, 値: 10 インデックス: 1, 値: 20 インデックス: 2, 値: 30 インデックス: 3, 値: 40
ラベル付きforループ
ネストしたループで特定のループを制御するために、ラベルを付けてbreak
やcontinue
を使うことができます。
package main
import "fmt"
func main() {
OuterLoop:
for i := 1; i <= 3; i++ {
for j := 1; j <= 3; j++ {
if j == 2 {
continue OuterLoop // 外側のループの次の反復へ
}
fmt.Println(i, j)
}
}
}
解説:
continue OuterLoop
を実行すると、外側のfor
ループの次の反復に移る。j == 2
のとき、内側のループだけでなく外側のループの次の反復へ進む。
実行結果:
1 1 2 1 3 1
注意事項
- 無限ループに注意: 条件を設定しないとループが永遠に続く可能性がある。
- Goにはwhileがない: 代わりに条件式のみの
for
を使用する。 - ネストが深くなると可読性が低下: ラベル付き
for
を使いすぎるとコードが複雑になる。
よくある質問
- Q: Goにはwhileループがないのですか?
- A: はい。Goには
while
キーワードはなく、for
のみを使ってすべてのループを表現します。for
の条件部分を省略すると、while
と同様の動作が可能です。 - Q: forループのインクリメント部分を省略できますか?
- A: はい。
for ; 条件 ; { ... }
のように書くことで、ループ変数の増減を手動で管理できます。 - Q: for文のスコープはどうなりますか?
- A: ループ変数はその
for
ブロック内でのみ有効です。ループ外でアクセスするとコンパイルエラーになります。 - Q: rangeでループする際にインデックスが不要な場合はどうしますか?
- A:
for _, value := range slice
のようにアンダースコア(_
)を使ってインデックスを無視できます。 - Q: ラベル付きforループはどんな場合に使うべきですか?
- A: 深くネストしたループを途中で抜ける必要がある場合に使うと便利ですが、多用すると可読性が下がるため注意が必要です。
まとめ
for
はGoで唯一のループ構文であり、while
のようにも使用できる。- 初期化、条件、更新の3つの部分を持つ標準的な
for
ループを使用できる。 - 条件のみを指定することで、
while
のようなループを作成できる。 - 無限ループを作るには
for {}
を使用し、適切な条件でbreak
を入れる。 range
を使うと、スライスやマップを簡単に反復処理できる。- ラベルを使うと、ネストしたループを制御できるが、可読性が低下するため注意が必要。