1. 程式人生 > 實用技巧 >for 迴圈語句

for 迴圈語句

0. 語句模型

這是 for 迴圈的基本模型。

for [condition |  ( init; condition; increment ) | Range]
{
   statement(s);
}

可以看到 for 後面,可以接三種類型的表示式。

  1. 接一個條件表示式

  2. 接三個表示式

  3. 接一個 range 表示式

但其實還有第四種

  1. 不接表示式

1. 接一個條件表示式

這個例子會列印 1 到 5 的數值。

a := 1
for a <= 5 {
    fmt.Println(a)
    a ++ 
}
輸出如下

1
2
3
4
5

2. 接三個表示式

for 後面,緊接著三個表示式,使用;分隔。

這三個表示式,各有各的用途

  • 第一個表示式:初始化控制變數,在整個迴圈生命週期內,只執行一次;

  • 第二個表示式:設定迴圈控制條件,當返回true,繼續迴圈,返回false,結束迴圈;

  • 第三個表示式:每次循完開始(除第一次)時,給控制變數增量或減量。

這邊的例子和上面的例子,是等價的。

import "fmt"

func main() {
    for i := 1; i <= 5; i++ {
        fmt.Println(i)
    }
}
輸出如下

1
2
3
4
5
2

不接表示式:無限迴圈

在 Go 語言中,沒有 while 迴圈,如果要實現無限迴圈,也完全可以 for 來實現。

當你不加任何的判斷條件時, 就相當於你每次的判斷都為 true,程式就會一直處於執行狀態,但是一般我們並不會讓程式處於死迴圈,在滿足一定的條件下,可以使用關鍵字break退出迴圈體,也可以使用continue直接跳到下一迴圈。

下面兩種寫法都是無限迴圈的寫法。

for {
    程式碼塊
}

// 等價於
for ;; {
    程式碼塊
}
舉個例子

import "fmt"

func main() {
    var i int = 1
    for {
        if i > 5 {
            break
        }
        fmt.Printf(
"hello, %d\n", i) i++ } } 輸出如下 hello, 1 hello, 2 hello, 3 hello, 4 hello, 5

3. 接 for-range 語句

遍歷一個可迭代物件,是一個很常用的操作。在 Go 可以使用 for-range 的方式來實現。

range 後可接陣列、切片,字串等

由於 range 會返回兩個值:索引和資料,若你後面的程式碼用不到索引,需要使用_表示 。

import "fmt"

func main() {
    myarr := [...]string{"world", "python", "go"}
    for _, item := range myarr {
        fmt.Printf("hello, %s\n", item)
    }
}
輸出如下

hello, world
hello, python
hello, go