循環語句 可以用來重複執行某一段代碼。在 C 語言中,循環語句有
for
、
while
和
do while
三種循環。但在 Go 中隻有
for
一種循環語句。下面是
for
循環語句的四種基本模型:
// for 接三個表達式
for initialisation; condition; post {
code
}
// for 接一個條件表達式
for condition {
code
}
// for 接一個 range 表達式
for range_expression {
code
}
// for 不接表達式
for {
code
}
接下來我們對每一種模型進行講解。
接一個條件表達式
下面的例子利用
for
循環列印
0
到
3
的數值:
num := 0
for num < 4 {
fmt.Println(num)
num++
}
運作該程式輸出如下:
0
1
2
3
接三個表達式
for
後面接的這三個表達式,各有各的用途:
- 第一個表達式(
):初始化控制變量,在整個循環生命周期内,隻執行一次;initialisation
- 第二個表達式(
):設定循環控制條件,該表達式值為 condition
時循環,值為 true
時結束循環;false
- 第三個表達式(
):每次循環完都會執行此表達式,可以利用其讓控制變量增量或減量。post
這三個表達式,使用
;
分隔。
for num := 0; num < 4; num++ {
fmt.Println(num)
}
該程式的輸出和上面的例子是等價的。這裡注意一點,在第一個表達式聲明的變量
num
的作用域隻在
for
循環裡面有效。
接一個 range 表達式
在 Go 中周遊一個可疊代的對象一般使用
for-range
語句實作,其中
range
後面可以接數組、切片、字元串等,
range
會傳回兩個值,第一個是索引值,第二個是資料值。
str := "abcd"
for index, value := range str{
fmt.Printf("index %d, value %c\n", index, value)
}
運作該程式輸出如下:
index 0, value a
index 1, value b
index 2, value c
index 3, value d
不接表達式
for
後面不接表達式就相當于無限循環,當然,可以使用
break
語句退出循環。
下面兩種無限循環的寫法等價,但一般使用第一種寫法。
// 第一種寫法
for {
code
}
// 第二種寫法
for ;; {
code
}
下面是一個輸出數字
0
到
3
的例子:
i := 0
for {
if i > 3 {
break
}
fmt.Println(i)
i++
}
運作該程式輸出如下:
0
1
2
3
break 語句
break
語句用于終止
for
循環,之後程式将執行在
for
循環後的代碼。上面的例子已經示範了
break
語句的使用。
continue 語句
continue
語句用來跳出
for
循環中的目前循環。在
continue
語句後的所有的
for
循環語句都不會在本次循環中執行,執行完
continue
語句後将會繼續執行一下次循環。下面的程式會列印出
10
以内的奇數。
for num := 1; num <= 10; num++ {
if num % 2 == 0 {
continue
}
fmt.Println(num)
}
運作該程式輸出如下:
1
3
5
7
9
參考文獻:
[1] Alan A. A. Donovan; Brian W. Kernighan, Go 程式設計語言, Translated by 李道兵, 高博, 龐向才, 金鑫鑫 and 林齊斌, 機械工業出版社, 2017.