Golang從入門到精通(六):Golang控制語句之for
for結構介紹
Go語言只有for迴圈這一種迴圈結構。
基本的for迴圈包含三個由分號分開的組成部分:
1.初始化語句:在第一次迴圈執行前被執行
2.迴圈條件表示式:每輪迭代開始前被求值
3.後置語句:每輪迭代後被執行
初始化語句一般是一個短變數宣告,這裡宣告的變數僅在整個 for 迴圈語句可見。
如果條件表示式的值變為 false,那麼迭代將終止。
注意:不像 C,Java,或者 Javascript 等其他語言,Go語言中的for迴圈語句的三個部分不需要用括號括起來,但迴圈體必須用 { } 括起來。
基於計數器的for迴圈
基於計數器的迭代,基本形式為:
for 初始化語句; 條件語句; 修飾語句 {
//迴圈語句
}
我們用for迴圈來計算10以內正整數的和。
package main
import(
"fmt"
)
func main() {
sum := 0
for i := 0; i < 10; i++ {
sum += i
}
fmt.Println(sum)
}
由花括號括起來的程式碼塊會被重複執行已知次數,該次數是根據計數器(此例為 i)決定的。迴圈開始前,會執行且僅會執行一次初始化語句 i := 0;
,這比在迴圈之前宣告更為簡短。緊接著的是條件語句 i < 10;
i++
,一般用於增加或減少計數器。
這三部分組成的迴圈的頭部,它們之間使用分號 ; 相隔,但並不需要括號 () 將它們括起來。例如:
for (i = 0; i < 10; i++) { } //非法程式碼!
所示是非法的程式碼!
和if-else語句類似,for迴圈中左花括號{
必須和 for 語句在同一行,計數器的生命週期在遇到右花括號}
時便終止。一般習慣使用 i、j、z 或 ix 等較短的名稱命名計數器。
基於條件判斷的for迴圈
for 迴圈的第二種形式是沒有頭部的條件判斷(類似其它語言中的 while 迴圈),基本形式為:
for 條件語句 {}
也可以認為這是沒有初始化語句和修飾語句的 for 結構,因此 ;;
便是多餘的了。
我們來寫一個基於條件判斷的簡單for迴圈,示例程式碼如下:
package main
import "fmt"
func main() {
var i int = 5
for i >= 0 {
i = i - 1
fmt.Printf("The variable i is now: %d\n", i)
}
}
for-range結構
提到for迴圈,我們必須再提一下range()這個內建函式,這是 Go 語言特有的一種的迭代結構,它一般用來遍歷陣列,slice和map等集合。
我們用range來遍歷一個數組,以下程式碼會打印出每個值的序號和對應的值。
package main
import(
"fmt"
)
func main() {
arr := [...]int{6, 7, 8}
for i, v := range arr {
fmt.Println(i,v)
}
}
輸出:
0 6
1 7
2 8
無限迴圈
Go 語言有以下幾種無限迴圈:
i:=0; ; i++
for { }
for ;; { }
for true { }
這些無限迴圈都是 for 迴圈的條件語句被省略了。如果 for 迴圈的頭部沒有條件語句,那麼就會認為條件永遠為 true。因此如果不想造成死迴圈,迴圈體內必須有相關的條件判斷以確保會在某個時刻退出迴圈。