Go言語には、一連のステートメントを繰り返す方法がいくつかありますが、そのうちの一つがfor文です。
forループは、for文の条件が満たされるまで、コードのブロックを無限に繰り返すために使用されます。この形式のforループの構文は、次の通りです。
for condition {
// 実行されるコード
}
ここでは、ループの各反復の前に条件が評価されます。条件が真であればループは継続し、条件が偽であればループは停止します。
条件は、init文、条件、post文の3つの部分から構成されます。init文はループが始まる前に実行され、conditionは各反復の前に評価され、post文は各反復の後に実行されます。
package main
import "fmt"
func main() {
for i := 0; i < 5; i++ {
fmt.Println(i)
}
}
この例では、forループはinit文i := 0で始まり、ループカウンタiを0に宣言して初期化します。各反復の前にi < 5という条件が評価されます。この条件が真であれば、ループ内のコードが実行され、各反復の後にpost文i++が実行されます。これにより、ループが実行されるたびにiの値は1ずつ増加します。
このループはi < 5という条件が成立している限り実行し続け、iが5に達するとループは停止します。この例では、ループ内のコードはiの値を0から4まで表示します。
Note: forで定義した変数iは、そのforのスコープ内でしか使用することができず、forの外で使用するとコンパイルエラーとなります。
for-rangeループは、Goで配列、スライス、マップ、文字列、その他のコレクションを反復処理する簡潔な方法です。for-rangeループは、コレクションの要素に一つずつアクセスする便利な方法を提供します。
ここでは、for-rangeループを使って配列を繰り返し処理する例を示します。
package main
import "fmt"
func main() {
numbers := [5]int{1, 2, 3, 4, 5}
for i, number := range numbers {
fmt.Println(i, number)
}
}
この例では、numbers配列の要素を反復処理するために、rangeキーワードを使用したforループが使用されます。
このループでは、iとnumberという2つの変数を宣言し、それぞれ現在の要素のインデックスと値を格納します。ループの各反復において、iには現在の要素のインデックスが、numberには現在の要素の値が格納されます。
Note: 例えばPythonにも同じような機能として、enumerateやzipといったものがありますが、それらと同じ役割となります。
以下は、rangeキーワードを使ったforループで、マップを繰り返し処理する例です。
package main
import "fmt"
func main() {
grades := map[string]int{"Alice": 85, "Bob": 90, "Charlie": 95}
for name, grade := range grades {
fmt.Println(name, grade)
}
}
この例では、学生の名前と成績を対応させるマップを使用しています。
forループでは、rangeキーワードを使用して、gradeマップの要素を繰り返し処理します。ループの各反復において、nameおよびgradeという2つの変数が宣言され、それぞれ成績マップの現在の要素のキーと値が格納されます。
以下は、文字列を繰り返し処理する例です。
package main
import "fmt"
func main() {
message := "Hello, world!"
for i, char := range message {
fmt.Println(i, string(char))
}
}
forループではrangeキーワードを使用して、message文字列内の文字を繰り返し処理します。ループの各反復処理では、iとcharという2つの変数が宣言されており、それぞれメッセージ文字列の現在の文字のインデックスと値を格納しています。
Note: char変数はrune型であり、fmt.Printlnに渡される前にstring関数で文字列に変換されていることに注意してください。
以下は、rangeキーワードを使った forループでスライスを反復処理する例です。
package main
import "fmt"
func main() {
fruits := []string{"apple", "banana", "cherry"}
for i, fruit := range fruits {
fmt.Println(i, fruit)
}
}
forループでは、rangeキーワードを使用してスライスの要素を繰り返し処理します。ループの各反復処理では、スライスの現在の要素のインデックスと値を格納するために、iとfruitという2つの変数がそれぞれ宣言されています。
ループの各反復処理で fmt.Println関数が呼び出され、fruitsスライスの現在の要素のインデックスと値が表示されます。