Go/for
表示
< Go
Goにおける for キーワードは、ループ処理を記述するための唯一の構文です。他の多くのプログラミング言語にある while や do-while ループは、Go には for を用いて実現されます。for キーワードは非常に柔軟で、様々な形式でループを記述できます。
Go の for ループには、主に以下の4つの形式があります。
最も一般的な形式で、初期化ステートメント、ループ継続条件、および各イテレーション後の後処理ステートメントを指定します。
for initialization; condition; post { // ループ内で実行するコード }
initialization(初期化): ループの開始前に一度だけ実行されるステートメントです。通常、ループカウンタの初期化などに使用されます。ここで宣言された変数は、そのforループのスコープ内でのみ有効です。condition(条件): 各イテレーションの開始前に評価される真偽値の式です。この条件がtrueである限り、ループ内のコードが実行されます。条件が省略された場合、常にtrueとみなされ、無限ループになります。post(後処理): 各イテレーションの終了後に実行されるステートメントです。通常、ループカウンタのインクリメントやデクリメントなどに使用されます。
- 例
package main import "fmt" func main() { for i := 0; i < 5; i++ { fmt.Println(i) } }
この例では、i は 0 で初期化され、i < 5 の間ループが継続し、各イテレーション後に i がインクリメントされます。出力は以下のようになります。
0 1 2 3 4
2. while ループのような形式 (条件のみ)
[編集]初期化と後処理のステートメントを省略し、条件のみを指定することで、他の言語の while ループと同様の動作を実現できます。
for condition { // 条件が true の間、実行するコード }
- 例
package main import "fmt" func main() { count := 0 for count < 3 { fmt.Println("Count:", count) count++ } }
この例では、count が 3 より小さい間ループが継続します。出力は以下のようになります。
Count: 0 Count: 1 Count: 2
3. 無限ループ (条件なし)
[編集]条件を完全に省略すると、無限ループが作成されます。無限ループは、break ステートメントなどを用いて明示的に終了させる必要があります。
for { // 永遠に実行されるコード // break ステートメントなどでループを抜ける必要がある }
- 例
package main import ( "fmt" "time" ) func main() { for { fmt.Println("永遠に続く...") time.Sleep(1 * time.Second) // 特定の条件で break を使用してループを終了させる // if someCondition { // break // } } }
for ループは、配列、スライス、マップ、文字列、チャネルなどのコレクション型に対して、要素を反復処理するために range 句と共に使用されることがよくあります。
for index, value := range collection { // index: 要素のインデックスまたはキー // value: 要素の値 // ループ内で要素を処理するコード } // インデックスやキーが不要な場合は、ブランク識別子 "_" を使用できる for _, value := range collection { // 値のみを使用 } for index := range collection { // インデックスまたはキーのみを使用 }
- 例 (スライス)
package main import "fmt" func main() { numbers := []int{10, 20, 30, 40, 50} for index, value := range numbers { fmt.Printf("Index: %d, Value: %d\n", index, value) } }
- 例 (マップ)
package main import "fmt" func main() { ages := map[string]int{"Alice": 30, "Bob": 25, "Charlie": 35} for name, age := range ages { fmt.Printf("Name: %s, Age: %d\n", name, age) } }
まとめ
[編集]Go の for キーワードは、様々なループ処理のニーズに対応できる非常に柔軟な構文を提供します。Cスタイルのループ、while ループのような条件のみのループ、無限ループ、そして range 句を用いたコレクションの反復処理など、Go プログラミングにおけるループ処理の基本となります。