目次
基本的なfor文の使い方
for i := 初期値; i < ループ回数; i++ {
//処理
}
簡単なコード例
5回ループを回して数字を表示するだけの処理だと、以下のようになります。
package main
import "fmt"
func main() {
for i := 0; i < 5; i++ {
fmt.Println(i)
}
}
出力結果
0
1
2
3
4
breakを使ってループを止める場合
ループ処理を途中で抜けたい場合は「break」を使用します。他のプログラミング言語と同じですね。
上記のコード例で、もしループが3周を超えたら(4週目以降は)ループを抜けるようにすると以下のコードになります。
package main
import "fmt"
func main() {
for i := 0; i < 5; i++ {
if i == 3 {
break
}
fmt.Println(i)
}
}
出力結果は以下の通りで、ループは3周分しか繰り返されません。
0
1
2
2重でfor文を使用する場合
for文のループ処理を複数重ねたいときは以下のようにします。少々冗長になりますが、これがGo言語です。
package main
import "fmt"
func main() {
for x := 0; x < 5; x++ {
for y := 0; y < 5; y++ {
if y == 3 {
break
}
fmt.Println("y =>", y)
}
fmt.Println("x =>", x)
}
fmt.Println("end")
}
実行結果は以下の通りです。
y => 0
y => 1
y => 2
x => 0
y => 0
y => 1
y => 2
x => 1
y => 0
y => 1
y => 2
x => 2
y => 0
y => 1
y => 2
x => 3
y => 0
y => 1
y => 2
x => 4
end
上記のコードだとbreakした後も外側のループ文は動いてしまってますね。
もしこれを、「breakしたら全てのループから抜ける」という処理にしたい場合は、「label」を使います。
labelを使って全てのループから抜ける方法
ラベルを用いて、2重for文のループを抜ける書き方は基本的に以下の通りです。
ラベル名:
for ... {
for ... {
break ラベル名
}
}
具体的なコード例を挙げるとこんな感じです。
package main
import "fmt"
func main() {
label:
for x := 0; x < 5; x++ {
for y := 0; y < 5; y++ {
if y == 3 {
break label
}
fmt.Println("y =>", y)
}
fmt.Println("x =>", x)
}
fmt.Println("end")
}
実行結果は以下のとおりで、最初にbreakした後は完全に全てのループを抜けて、ループの外側にある処理が実行されます。
y => 0
y => 1
y => 2
end
for…range文の使い方
配列の要素数文ループを回す方法(他言語でいうforeach)をやる場合は、「for…range」構文を使用します。
基本的な使い方は以下の通り。
for i, v := range 配列 {
//処理
}
変数iには配列のインデックス番号が、変数vには配列の要素がそれぞれ入ります。
for…range構文の具体的なコード例
数値が3つ入った配列を用意し、それらの要素をインデッックス番号と共に出力するコードです。
package main
import "fmt"
func main() {
numbers := []int{100, 200, 300}
for i, v := range numbers {
fmt.Println(i, v)
}
}
実行結果は以下のようになります。
0 100
1 200
2 300