Go | 多重的選擇與條件判斷
💬 簡介
switch
語句是一種非常有效的控制流程語法,可以讓我們在多個選項中進行選擇並執行相應的程式碼。switch
是一種替代多層 if-else
語句的寫法,當面對多重條件時,它能提高程式碼的可讀性與可維護性。
本文將介紹 switch
語句的基本用法,以及如何在實際開發中應用它來實現條件判斷和選擇。
圖片來源:Gophers
📚 switch
語句基本概念
switch
語句是用來檢查一個變數或表達式的值,並根據不同的情況執行對應的程式碼。它比多重 if-else
語句更簡潔、直觀,尤其在條件分支較多時更具優勢。
基本語法如下:
1 | switch <expression> { |
基本的 switch 使用:
1 | package main |
📝 在這個範例中,變數 day 的值為 3,因此會執行 case 3 的程式碼,輸出 星期三。如果 day 的值不是 1 到 5 之間的任何數字,則會進入 default 分支,輸出 週末。
🧐 switch 的條件判斷方式
除了單純符合一個值,switch
還能進行更靈活的條件判斷。
1️⃣ 無條件表達式的 switch
如果 switch
語句後面不指定表達式,則會默認為 true
,每個 case
都會是一個條件表達式,判斷是否成立。
- 範例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17package main
import "fmt"
func main() {
var score = 85
switch {
case score >= 90:
fmt.Println("優秀")
case score >= 80:
fmt.Println("良好")
case score >= 70:
fmt.Println("普通")
default:
fmt.Println("及格以下")
}
}📝 在這個範例中,我們沒有指定
switch
的表達式,switch
的每個case
都是一個條件,依據score
的值選擇符合的case
。這樣的寫法非常適合用來處理範圍判斷。
2️⃣ fallthrough
關鍵字
Go 語言中的 switch
默認情況下不會自動向下「滾動」,也就是說,一旦符合成功後,會直接跳出 switch
。如果需要強制執行後續的 case
,可以使用 fallthrough
。
- 範例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19package main
import "fmt"
func main() {
var day = 2
switch day {
case 1:
fmt.Println("星期一")
fallthrough
case 2:
fmt.Println("星期二")
fallthrough
case 3:
fmt.Println("星期三")
default:
fmt.Println("週末")
}
}📝 在這個範例中,當
day
的值為2
時,會首先執行case 2
,然後使用fallthrough
強制執行後續的case 3
。這樣的結果是,輸出會是:1
2星期二
星期三
🛠️ switch
在實際應用中的使用
1️⃣ 根據使用者輸入進行選擇
switch
常用於根據使用者輸入進行條件判斷,並做出對應的處理。
- 範例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20package main
import "fmt"
func main() {
var input string
fmt.Println("請輸入你今天的心情:")
fmt.Scan(&input)
switch input {
case "開心":
fmt.Println("太棒了!保持這個好心情!")
case "難過":
fmt.Println("希望你很快能夠振作起來!")
case "生氣":
fmt.Println("放輕鬆,冷靜下來!")
default:
fmt.Println("無法辨識這種心情,試著再輸入一次。")
}
}📝 在這個範例中,根據使用者輸入的心情來進行對應的反應,這樣可以讓程式更具交互性。
2️⃣ 使用 switch
檢查資料型別
switch
也可以用來判斷變數的資料型別,這在處理介面(interface
)時非常有用。
- 範例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22package main
import "fmt"
func checkType(v interface{}) {
switch v := v.(type) {
case int:
fmt.Println("整數型別:", v)
case string:
fmt.Println("字串型別:", v)
case bool:
fmt.Println("布林型別:", v)
default:
fmt.Println("未知型別")
}
}
func main() {
checkType(42)
checkType("Go語言")
checkType(true)
}📝 在這個範例中,使用
v.(type)
來檢查變數的資料型別,並根據不同的型別進行不同的處理。這是一種常見的技術,特別是在處理介面(interface
)時。
🚀 進階應用:switch
的多重條件與賦值
1️⃣ 使用多重條件
你可以在一個 case
中放入多個條件,這樣可以讓程式在符合多個值時更加簡潔。
- 範例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16package main
import "fmt"
func main() {
var num1 int = 100
switch num1 {
case 98, 99:
fmt.Println("It's equal to 98 or 99")
case 100:
fmt.Println("It's equal to 100")
default:
fmt.Println("It's not equal to 98 or 100")
}
}📝 在這個範例中,
case 98, 99
會符合num1
等於98
或99
的情況。這樣寫能夠使多重條件的判斷更簡潔。
2️⃣ 賦值與條件判斷
switch
中不僅可以進行值的比較,還可以使用函式的返回值來賦值,並根據其結果進行條件判斷。
- 範例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19package main
import "fmt"
// 模擬一個計算函式
func calculate() int {
return -1
}
func main() {
switch result := calculate(); {
case result < 0:
fmt.Println("計算結果為負數")
case result > 0:
fmt.Println("計算結果為正數")
default:
fmt.Println("計算結果為零")
}
}📝 在這個範例中,我們使用
calculate()
函式的返回值賦給result
,並根據其值進行條件判斷。這樣的寫法能夠將賦值與判斷結合在switch
語句中,實現更靈活的邏輯處理。
🎯總結
switch
語句是非常實用的一種控制流程語法,它能夠讓我們在多個選項中做出選擇,並提高程式碼的可讀性與維護性。通過本文中的範例,你應該能夠理解如何使用 switch
來進行簡單或複雜的條件判斷,並在實際開發中靈活運用。
記住,switch
不僅可以符合具體的值,還能根據條件進行判斷,甚至可以應用在資料型別檢查上,這使得它在多數情境中都非常方便且強大。
最後建議回顧一下 Go | 菜鳥教學 目錄,了解其章節內容。
註:以上參考了
Go