探索 Go 語言的流程控制
👨💻簡介
本文簡單介紹了 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
一起使用。較少使用 label
和 goto
的程式碼更容易閱讀和維護。以下是一個使用 label
和 goto
的範例:
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
}
}
注意事項
- 在使用條件語句時,確保清楚地理解不同分支的執行情況,避免邏輯錯誤。
- 在使用迴圈時,謹記設定適當的終止條件,以免陷入無限迴圈。