いくつかの有用な例をコーディングして、Golang for ループについてすべて学びましょう。
最近、Rust、Golang、TypeScript などのプログラミング言語が開発者の間で非常に人気になっています。バックエンド開発と DevOps に興味がある場合は、Golang を学ぶことが優れた選択肢であることを検討してください。
プログラミング言語の基礎を学ぶ初心者の場合、ループ構造は最初に理解する必要がある概念の 1 つです。
Golang は for ループ構造のみを提供します。そして、for ループについてと、for ループを使用して他のループをエミュレートする方法についても学びます。
さぁ、始めよう!
![Golang For ループのチュートリアル [例付き]](https://i.ytimg.com/vi/c9HfViNtqks/maxresdefault.jpg)
GolangのForループの構文
Golang では、次の構文を使用して for ループを作成できます。
for initialization; condition; update {
// do something
}
ここ、
- 初期化は、 ループ変数の初期化を示します。
- 条件 は、ループ本体の実行を決定するループ条件です。ループ条件が true と評価される限り、ループ本体内のステートメントが実行されます。条件が false になると、コントロールはループを終了します。
- update は、 ループ変数の更新 (通常は増分または減分) を示します。
💡 これが括弧を除いた C の for ループにどのように似ているかに注目してください。
Golang for ループの制御フローは次のとおりです。

いくつかのサンプルをコーディングしてみましょう!⏰ コーディングするには、Golang のローカル インストールを使用するか、 Go Playground でサンプルを実行します。
![Golang For ループのチュートリアル [例付き]](https://i.ytimg.com/vi/Esr_dItTqu4/maxresdefault.jpg)
Golang の For ループの例
学んだばかりの構文を使用して、最初の for ループを作成してみましょう。以下は、1 から 5 までの数値を 1 ずつ出力する単純な for ループです。
package main
import "fmt"
func main() {
fmt.Println("For loop:")
num := 5
for i := 1; i <= num; i++ {
fmt.Println(i)
}
}
ループ変数
i
を 1 に初期化し、条件を
i <= 5
に設定し、反復ごとにループ変数を 1 ずつインクリメントします。そして出力は次のとおりです。
//Output
For loop:
1
2
3
4
5
別の for ループを書いてみましょう。このループは 5 から始まり 1 までカウントダウンします。これは、ループ変数が 1 以上になるまで続きます。したがって、反復ごとにループ変数を 1 ずつ減らします。
package main
import "fmt"
func main() {
fmt.Println("For loop:")
num := 5
for i := num; i >= 1; i-- {
fmt.Println(i)
}
}
そして、期待される出力が得られます。
//Output
For loop:
5
4
3
2
1
ループ変数のスコープは何ですか?
ループ変数のスコープは for ループ ブロックに制限されており、ループの外からはアクセスできません。
これを確認するために、ループの外でループ変数
i
の値にアクセスしてみましょう。
package main
import "fmt"
func main() {
fmt.Println("For loop:")
num := 5
for i := 1; i <= num; i++ {
fmt.Println(i)
}
fmt.Println(i)
}
予想どおり、
i
未定義であることを示すエラーが発生します (そのスコープは for ループに制限されています)。
// Output
./prog.go:11:14: undefined: i
Golang の無限 For ループ

Go で無限 for ループを使用できますか?はい、もちろんできます!
for ループの制御フローを見ると、次のようになります。
- ループ本体は、条件が true と評価される限り実行を続けます。
- 条件が false になると、コントロールはループを終了します。
- したがって、条件が決して false にならない (または常に true) 場合、無限ループが発生します。
ただし、構文エラーが発生することなく、初期化、条件、更新を行わずに for ループを使用することもできます。したがって、次のような for ループ構造を使用してもループを無限に実行できる場合:
package main
import "fmt"
func main() {
for {
fmt.Println("running...")
}
}
//Output
running...
running...
running...
running...
running...
//and it goes on forever!
この例では、変数
num
5 に設定します。また、ループ条件は
num >= 5
です。したがって、ループは
num
が 0 以上である限り実行されます。
package main
import "fmt"
func main() {
num := 5
for num > 0 {
fmt.Println(num)
}
}
num
の値は決して変更されないため、条件は常に true と評価され、ループは永久に実行されます。
//Output
5
5
5
5
5
5
//and it goes on forever!
すべての Golang には for ループ構造しかありません。for ループを使用して while ループと do-while ループをエミュレートしてみることができます。それでは、その方法を学びましょう!
For ループを使用した While ループのエミュレーション
while ループは通常、次の形式を取ります。
// initialize looping var
while (condition){
// do something
// update looping var
}
思い出してください。最初の 無限 for ループでは、初期化、条件、更新を行わずに、次の for ループを使用しました。
for {
// the simplest infinite loop
}
したがって、 条件 (次の形式) のみ を含むように for ループを変更して、while ループをエミュレートできます。
//initialize looping var
for condition {
// do something
// update looping var
}
最初に作成した for ループと同等の while ループを次に示します。
package main
import "fmt"
func main() {
fmt.Println("Emulating while loop")
num := 5
for num > 0 {
fmt.Println(num)
num--
}
}
//Output
Emulating while loop
5
4
3
2
1
For ループを使用した Do-while ループのエミュレーション
C などの言語でコーディングしたことがある場合は、do-while ループ構造が次の形式をとることをご存知でしょう。
// initialize looping var
do {
//something
// update looping var
} while(condition);
while ループと do while ループの主な違いは、while ループはループに 入る と条件をチェックすることです。一方、do-while ループは、ループの 終了 時に条件をチェックします。
したがって、while ループでは、条件が false と評価された場合、ループ本体は実行されません。ただし、do-while ループでは、条件が false と評価された場合でもループ本体が実行されます。
この情報を使用して、do-while ループの動作をエミュレートできます。
- 無限 for ループを作成する
- ループを抜け出すには、正しい条件を指定して if 条件文を使用します。
実行するループ本体の条件が
num < 0
である do-while ループを作成するとします。したがって、 for ループを作成し、
num >= 0
の場合にループを抜け出すことができます。
package main
import "fmt"
func main() {
fmt.Println("Emulating do-while loop")
num := 5
for {
fmt.Println("loop runs...")
if num >= 0 {
break
}
}
}
💡
num < 0
の場合にループを実行することと、
num >= 0
の場合にループを抜け出すことは同等の条件であることに注意してください。
条件
num > 0
は最初は false (
num
は 5) ですが、ループ本体は 1 回実行され、do-while ループをエミュレートします。
//Output
Emulating do-while loop
loop runs...
for ループを使用した配列のループ

Golang で for ループと
range
を使用して配列をループすると、インデックスと要素
の両方に
アクセスできます。これは、Python の enumerate 関数と同様に機能します。
ここでは、整数の配列である
numArray
を作成します。そして、for ループを使用してループします。
package main
import "fmt"
func main() {
fmt.Println("Looping through an array")
numArray := []int{3, 7, 0, 10, 8, 9}
for idx, num := range numArray {
fmt.Println("At index", idx, ": ", num)
}
}
ご覧のとおり、インデックスと各インデックスの要素の両方に同時にアクセスできます。
//Output
Looping through an array
At index 0 : 3
At index 1 : 7
At index 2 : 0
At index 3 : 10
At index 4 : 8
At index 5 : 9
Golang For ループでの defer の使用
Golang では、
defer
キーワードを使用して関数呼び出しを延期できます。
リソースのクリーンアップやエラー処理などのアプリケーションで使用されますが、for ループ内で defer を使用する方法を理解すると役立ちます。 for ループ内で
defer
使用して
Println()
関数の呼び出しを延期すると何が起こるかを見てみましょう。
package main
import "fmt"
func main() {
fmt.Println("For loop:")
num := 5
for i := 1; i <= num; i++ {
defer fmt.Println(i)
}
}
💬 関数呼び出しが延期されると、関数呼び出しはスタックにプッシュされ、 LIFO 順序 で実行されます。この実行は、defer ステートメントを囲む関数が戻った 後に のみ発生します。
したがって、
fmt.Println(5)
最初に実行され、
fmt.Println(1)
が最後に実行されます。
//Output
For loop:
5
4
3
2
1
結論
このチュートリアルで学んだことの概要は次のとおりです。
-
Golang では、次の構文を使用して for ループを作成できます
for initialization; condition; update { //loop body}
. - for ループの制御フローは非常に単純です。ループ変数は一度初期化され、検索条件によってループ本体を実行するかどうかが決定され、更新とは反復ごとのループ変数の更新を指します。
- ループ変数のスコープはループ本体に限定されており、ループの外からはアクセスできません。
- Golang は for ループ構造のみを提供しますが、for ループを使用して while および do-while ループの動作をエミュレートできます。
- for ループの他の応用例としては、配列をループしたり、for ループ本体内で関数呼び出しを延期したりすることが含まれます。
次に、Python で for ループを使用する方法を学びます。楽しく学習してください!🎉