Go 言語では、for
キーワード 1 つだけで while
ループや無限ループを表現することができます。
C/C++ 言語風の for ループ
for 初期化; 条件式; 後処理 {
// ...
}
Go 言語の for
ループは、C/C++ 言語に似た構文を使用しますが、for
の直後は括弧で囲みません。
ただし、実行部分の括弧は必ず記述する必要があります。
このあたりのルールは、if
文と同じですね。
ちなみに、i++
という部分を、++i
という前置インクリメントに置き換えることはできません。
Go 言語では、i++
という後置インクリメントは文として扱われる(評価後の値を得られない)ため、式の中に埋め込むことができないようになっています。
そのため、前置インクリメントと後置インクリメントを区別する必要がそもそもなく、文法として後置インクリメントの形に統一するようになっています。
while ループ(としての for ループ)
Go 言語には while
ループ(条件に一致する限り繰り返し)は存在しませんが、for
ループで代用できます。
i := 0
// i が 3 より小さい間、繰り返す
for i < 3 {
fmt.Println(i)
i++
}
for
ループの初期化ステートメントや条件式、後処理ステートメントはそれぞれ省略することができるので、上記の for
ループは、実は下記のような記述の省略形です(上記のように省略して記述すべきです)。
for ; i < 3; {
// ...
}
無限ループ(としての for ループ)
Go 言語では、無限ループも for
を使用して記述するよう統一されています。
i := 0
for {
i += 1
if i > 5 {
break
}
if i % 2 == 0 {
continue
}
fmt.Println(i)
}
C/C++ 言語の無限ループの記載方法 (for (;;) { }
) に慣れているのであれば、上記は下記のような記述の省略形だと考えれば良いでしょう(このように書くべきではありませんが)。
for ;; {
// ...
}
ループの継続に continue
、終了に break
キーワードを使用するのも C/C++ 言語と同様です。