Go 語言 for 迴圈
for 迴圈是一個迴圈控制結構,可以執行指定次數的迴圈。
語法
Go 語言的 For 迴圈有 3 種形式,只有其中的一種使用分號。
和 C 語言的 for 一樣:
for init; condition; post { }
和 C 的 while 一樣:
for condition { }
和 C 的 for(;;) 一樣:
for { }
- init: 一般為賦值運算式,給控制變數賦初值;
- condition: 關係運算式或邏輯運算式,迴圈控制條件;
- post: 一般為賦值運算式,給控制變數增量或減量。
for語句執行過程如下:
1、先對運算式 1 賦初值;
2、判別賦值運算式 init 是否滿足給定條件,若其值為真,滿足迴圈條件,則執行循環體內語句,然後執行 post,進入第二次迴圈,再判別 condition;否則判斷 condition 的值為假,不滿足條件,就終止for迴圈,執行循環體外語句。
for 迴圈的 range 格式可以對 slice、map、數組、字串等進行迭代迴圈。格式如下:
for key, value := range oldMap { newMap[key] = value }
for語句語法流程如下圖所示:
實例
計算 1 到 10 的數字之和:
實例
package main
import "fmt"
func main() {
sum := 0
for i := 0; i <= 10; i++ {
sum += i
}
fmt.Println(sum)
}
import "fmt"
func main() {
sum := 0
for i := 0; i <= 10; i++ {
sum += i
}
fmt.Println(sum)
}
輸出結果為:
55
init 和 post 參數是可選的,我們可以直接省略它,類似 While 語句。
以下實例在 sum 小於 10 的時候計算 sum 自相加後的值:
實例
package main
import "fmt"
func main() {
sum := 1
for ; sum <= 10; {
sum += sum
}
fmt.Println(sum)
// 這樣寫也可以,更像 While 語句形式
for sum <= 10{
sum += sum
}
fmt.Println(sum)
}
import "fmt"
func main() {
sum := 1
for ; sum <= 10; {
sum += sum
}
fmt.Println(sum)
// 這樣寫也可以,更像 While 語句形式
for sum <= 10{
sum += sum
}
fmt.Println(sum)
}
輸出結果為:
16 16
無限迴圈:
實例
package main
import "fmt"
func main() {
sum := 0
for {
sum++ // 無限迴圈下去
}
fmt.Println(sum) // 無法輸出
}
import "fmt"
func main() {
sum := 0
for {
sum++ // 無限迴圈下去
}
fmt.Println(sum) // 無法輸出
}
要停止無限迴圈,可以在命令窗口按下ctrl-c 。
For-each range 迴圈
這種格式的迴圈可以對字串、數組、切片等進行迭代輸出元素。
實例
package main
import "fmt"
func main() {
strings := []string{"google", "zaixian"}
for i, s := range strings {
fmt.Println(i, s)
}
numbers := [6]int{1, 2, 3, 5}
for i,x:= range numbers {
fmt.Printf("第 %d 位 x 的值 = %d\n", i,x)
}
}
import "fmt"
func main() {
strings := []string{"google", "zaixian"}
for i, s := range strings {
fmt.Println(i, s)
}
numbers := [6]int{1, 2, 3, 5}
for i,x:= range numbers {
fmt.Printf("第 %d 位 x 的值 = %d\n", i,x)
}
}
以上實例運行輸出結果為:
0 google 1 zaixian 第 0 位 x 的值 = 1 第 1 位 x 的值 = 2 第 2 位 x 的值 = 3 第 3 位 x 的值 = 5 第 4 位 x 的值 = 0 第 5 位 x 的值 = 0