【Golang】for文、for..range文でループ処理を実行する方法

基本的な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
タイトルとURLをコピーしました