天天看點

Go 語言系列19:循環語句

循環語句 可以用來重複執行某一段代碼。在 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
}      

接下來我們對每一種模型進行講解。

Go 語言系列19:循環語句

接一個條件表達式

Go 語言系列19:循環語句

下面的例子利用 ​

​for​

​​ 循環列印 ​

​0​

​​ 到 ​

​3​

​ 的數值:

num := 0
for num < 4 {
    fmt.Println(num)
    num++
}      

運作該程式輸出如下:

0
1
2
3      
Go 語言系列19:循環語句

接三個表達式

Go 語言系列19:循環語句

​for​

​ 後面接的這三個表達式,各有各的用途:

  • 第一個表達式(​

    ​initialisation​

    ​):初始化控制變量,在整個循環生命周期内,隻執行一次;
  • 第二個表達式(​

    ​condition​

    ​):設定循環控制條件,該表達式值為 ​

    ​true​

    ​ 時循環,值為 ​

    ​false​

    ​ 時結束循環;
  • 第三個表達式(​

    ​post​

    ​):每次循環完都會執行此表達式,可以利用其讓控制變量增量或減量。

這三個表達式,使用 ​

​;​

​ 分隔。

for num := 0; num < 4; num++ {
    fmt.Println(num)
}      

該程式的輸出和上面的例子是等價的。這裡注意一點,在第一個表達式聲明的變量 ​

​num​

​​ 的作用域隻在 ​

​for​

​ 循環裡面有效。

Go 語言系列19:循環語句

接一個 range 表達式

Go 語言系列19:循環語句

在 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      
Go 語言系列19:循環語句

不接表達式

Go 語言系列19:循環語句

​for​

​​ 後面不接表達式就相當于無限循環,當然,可以使用 ​

​break​

​ 語句退出循環。

下面兩種無限循環的寫法等價,但一般使用第一種寫法。

// 第一種寫法
for {
    code
}      
// 第二種寫法
for ;; {
    code
}      

下面是一個輸出數字 ​

​0​

​​ 到 ​

​3​

​ 的例子:

i := 0
for {
    if i > 3 {
        break
    }
    fmt.Println(i)
    i++
}      

運作該程式輸出如下:

0
1
2
3      
Go 語言系列19:循環語句

break 語句

Go 語言系列19:循環語句

​break​

​​ 語句用于終止 ​

​for​

​​ 循環,之後程式将執行在 ​

​for​

​​ 循環後的代碼。上面的例子已經示範了 ​

​break​

​ 語句的使用。

Go 語言系列19:循環語句

continue 語句

Go 語言系列19:循環語句

​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.

繼續閱讀