読者です 読者をやめる 読者になる 読者になる

覚えたら書く

IT関係のデベロッパとして日々覚えたことを書き残したいです。 twitter: @yyoshikaw

Go言語 - forループによる繰り返し処理

Go言語で繰り返し処理(ループ)を記述するために用意されている構文はforのみとなっています。
whiledo whileといったものは提供されていません。


無限ループ

他の言語であれば、無限ループを記述する場合は、 while(true) { xxx } といったようにwhileを利用する場合が多いと思います。

が、先に書いたようにGo言語にはwhileはありません。forを使って以下のように記述します。

for {
    // ここに無限ループで実行する処理を記述
    fmt.Println("Running...")
}


独特と言えば独特ですが、慣れてしまえばなんてことない気もします。


while的な記述

他言語のwhile文のようにループ条件だけを記述したい場合はforで以下のように書くことができます

coundown := 10
for coundown > 0 {
    fmt.Printf("coundown: %d\n", coundown)
    coundown--
}


典型的なfor

ループ変数を利用して1ずつ値を増加させてある最大値まで処理をさせるといった、基本的なループは以下のように記述します

for i := 0; i < 10; i++ {
    // iの値が0から9まで変化していく
    fmt.Printf("i = %d\n", i)
} 

Go言語の構文の関係で、他言語でみられる 初期値や条件を指定する部分を括弧で囲む という記述はできません


rangeを使ったfor

いわゆる 拡張for文(foreach文)と呼ばれるループを行う場合はrange節を使用します


例えば配列に対するrangeを利用したforループは以下のように記述できます

strArray := [5]string{"taro", "jiro", "hanako", "ken", "tom"}

for i, s := range strArray {
    fmt.Printf("index: %d, name: %s\n", i, s)
}

配列に対するrangeでは、index番号と要素の値が返されます。

例えば、配列に対するrangeで返されるindex番号が処理上不要という場合には以下のように無視することもできます。

strArray := [5]string{"taro", "jiro", "hanako", "ken", "tom"}

for _, s := range strArray {
    fmt.Printf("name: %s\n", s)
}