5.5 流程控制

與流程控制有關的語法和範例。

for loop

底下是幾種常見的寫法:

i := 1
for i <= 3 {
    fmt.Println(i)
}

for j := 0; j < 3; j++ {
    fmt.Println(j)
}

for {  // 無限迴圈
    fmt.Println("loop")
}

迴圈裡面可以用 continue 來進行下一圈,以及用 break 來跳離迴圈。

For-each range loop

使用 range 關鍵字來指定索引值的範圍:

for i := range 3 {  // i = 0, 1, 2
    fmt.Println("range", i)
}

常用來處理 arrays、slices、maps、channels 等結構:

strings := []string{"hello", "world"}
for i, s := range strings {
    fmt.Println(i, s)
}

執行結果:

0 hello
1 world

上例中,若不在乎陣列的索引值,可使用 blank identifier _ 取代 i

strings := []string{"hello", "world"}
for _, s := range strings {
    fmt.Println(s)
}

執行結果:

hello
world

if statement

Go 的 if 陳述式不需要使用小括弧 (),但必須使用大括號 {}。雖然某些簡單的表達式可以使用小括弧,例如 if (j > 10) {} 這樣的寫法可以通過編譯,但與常見的寫法不一致,而且多此一舉。

Note

事實上,在 VS Code 中編寫 Go 程式的時候,即使在 if 陳述式中使用了小括弧,那些小括弧會在存檔時被 gofmt 工具自動消除。這是因為 Go 工具鍊在 VS Code 中的預設配置為存檔時自動格式化。參閱: 01 Get started > VS Code

else 敘述一定要跟在 if 區塊結尾的大括號後面,不能寫成單獨一行,像底下這樣的寫法將無法通過編譯:

if j > 10 {
}
else { // 編譯錯誤! else 必須寫在 if 區塊結尾的同一行。
}

If with a short statement

類似 for 迴圈,if 敘述也可以先有一個短敘述(short statement),然後才跟著判斷式。

範例:

func pow(x, n, lim float64) float64 {
    if v := math.Pow(x, n); v < lim {
        return v
    }
    return lim
}

第 2 行的意思是先把 math.Pow() 的結果指派給變數 v,然後判斷 v 是否小於 lim

注意:由 if 的短敘述所宣告的變數只活在那個 if 區塊內。


先這樣,也許有空時會再更新。   我的其他站點:      

Last modified: 2024-10-15