👨‍💻簡介

本文簡單介紹了 Go 語言的流程控制概念,涵蓋了從條件語句到迴圈,再到 range 遍歷數據結構,以及 goto 與標籤 label 的應用。主要知識點為如何使用 if 語句進行條件判斷,以及在不同情況下運用 switch 語句。此外,還探討了 for 迴圈和 range 的運用,以及在特定情境下使用 goto 與 label。

條件語句

在 Go 語言中,我們可以使用條件語句來根據不同的條件執行不同的程式碼塊。常見的條件語句包括:

if 語句

if 語句用來檢查一個條件是否成立,如果條件為真,就執行相關的程式碼塊。例如:

age := 18
if age >= 18 {
    fmt.Println("你已成年")
} else {
    fmt.Println("你還未成年")
}

我們也可以使用 else if 分支處理多種情況:

age := 25

if age < 18 {
    fmt.Println("你還未成年")
} else if age >= 18 && age < 60 {
    fmt.Println("你已成年,但尚未退休")
} else {
    fmt.Println("你已退休")
}

我們甚至可以在 if 語句中宣告並初始化一個變數,然後根據條件進行判斷:

if num2 := 10; num2 >= 10 {
    fmt.Println("變數 num2 大於等於 10")
}

switch 語句

switch 語句用來根據不同的值進行不同的處理。我們可以使用 switch 來避免多個 if 判斷。例如:

day := "Sunday"
switch day {
case "Monday":
    fmt.Println("星期一")
case "Tuesday":
    fmt.Println("星期二")
case "Sunday":
    fmt.Println("星期天")
default:
    fmt.Println("其他天")
}

我們也可以在 switch 語句中宣告並初始化一個變數,然後根據其值進行判斷:

switch day := "Sunday"; day {
case "Monday":
    fmt.Println("星期一")
case "Tuesday":
    fmt.Println("星期二")
case "Sunday":
    fmt.Println("星期天")
default:
    fmt.Println("其他天")
}

我們甚至可以在 case 中處理多個值,共用相同的程式碼塊,例如:

day := "Saturday"

switch day {
case "Monday", "Tuesday", "Wednesday", "Thursday", "Friday":
    fmt.Println("工作日")
case "Saturday", "Sunday":
    fmt.Println("週末")
default:
    fmt.Println("其他")
}

迴圈

迴圈是一種重複執行程式碼塊的結構。Go 語言提供了幾種迴圈方式:

for 迴圈

for 迴圈用來重複執行一段程式碼塊,可以指定初始值、條件和遞增方式。例如:

for i := 0; i < 5; i++ {
    fmt.Println(i)
}

while 迴圈

Go 語言中沒有 while 關鍵字,但我們可以使用 for 迴圈來實現類似的功能:

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

無限迴圈

我們可以使用 for 迴圈來創建無限迴圈,例如:

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

使用 range 遍歷數據結構

除了上述的迴圈方式外,我們還可以使用 range 關鍵字來遍歷數組、切片、字串、映射等數據結構。例如:

numbers := []int{1, 2, 3, 4, 5}
for index, value := range numbers {
    fmt.Printf("索引 %d 的值為 %d\n", index, value)
}

word := "Hello"
for index, char := range word {
    fmt.Printf("索引 %d 的字符為 %c\n", index, char)
}

跳出與繼續

在迴圈中,我們可以使用 break 來提前結束迴圈,使用 continue 來跳過本次迭代,繼續下一次迭代。

for i := 0; i < 5; i++ {
    if i == 2 {
        continue // 跳過本次迭代,繼續下一次迭代
    }
    if i == 4 {
        break // 提前結束迴圈
    }
    fmt.Println(i)
}

跳轉語句 goto

在某些情況下,我們可能需要使用 goto 來直接跳轉到程式碼中的指定標籤位置。然而,goto 往往會讓程式碼變得複雜且難以理解,因此在實際開發中應謹慎使用。

func main() {
    i := 0
Loop:
    fmt.Println(i)
    i++
    if i < 5 {
        goto Loop
    }
}

標籤 label

label 是一種用於標記程式碼位置的方式,通常與 goto 一起使用。較少使用 labelgoto 的程式碼更容易閱讀和維護。以下是一個使用 labelgoto 的範例:

func main() {
    outer := 0
LoopOuter:
    for outer < 3 {
        inner := 0
    LoopInner:
        for inner < 3 {
            fmt.Printf("外部迴圈:%d,內部迴圈:%d\n", outer, inner)
            inner++
            goto LoopInner
        }
        outer++
        goto LoopOuter
    }
}

注意事項

  • 在使用條件語句時,確保清楚地理解不同分支的執行情況,避免邏輯錯誤。
  • 在使用迴圈時,謹記設定適當的終止條件,以免陷入無限迴圈。

📚Reference