Like Share Discussion Bookmark Smile

J.J. Huang   2025-02-22   Getting Started Golang 03.控制流程   瀏覽次數:次   DMCA.com Protection Status

Go | 多重的選擇與條件判斷

💬 簡介

switch 語句是一種非常有效的控制流程語法,可以讓我們在多個選項中進行選擇並執行相應的程式碼。switch 是一種替代多層 if-else 語句的寫法,當面對多重條件時,它能提高程式碼的可讀性與可維護性。

本文將介紹 switch 語句的基本用法,以及如何在實際開發中應用它來實現條件判斷和選擇。

圖片來源:Gophers


📚 switch 語句基本概念

switch 語句是用來檢查一個變數或表達式的值,並根據不同的情況執行對應的程式碼。它比多重 if-else 語句更簡潔、直觀,尤其在條件分支較多時更具優勢。

基本語法如下:

1
2
3
4
5
6
7
8
switch <expression> {
case <value1>:
// 當 expression 等於 value1 時執行的程式碼
case <value2>:
// 當 expression 等於 value2 時執行的程式碼
default:
// 如果沒有任何 case 符合時執行的程式碼
}

基本的 switch 使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package main

import "fmt"

func main() {
var day = 3
switch day {
case 1:
fmt.Println("星期一")
case 2:
fmt.Println("星期二")
case 3:
fmt.Println("星期三")
case 4:
fmt.Println("星期四")
case 5:
fmt.Println("星期五")
default:
fmt.Println("週末")
}
}

📝 在這個範例中,變數 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
    17
    package 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
    19
    package 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
    20
    package 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
    22
    package 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
    16
    package 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 等於 9899 的情況。這樣寫能夠使多重條件的判斷更簡潔。

2️⃣ 賦值與條件判斷

switch 中不僅可以進行值的比較,還可以使用函式的返回值來賦值,並根據其結果進行條件判斷。

  • 範例:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    package 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