Golang | switch-case


Switch-case

switch 語句用於基於不同條件執行不同動作,每一個 case 分支都是唯一的,從上直下逐一測試,直到匹配為止。 switch 分支表達式可以是任意類型,不限於常量。可省略 break,默認自動終止。

Switch 語句

Go 語言中的 switch 結構使用上更加靈活。它接受任意形式的表達式:

    import "fmt"

    func main() {
        k := 1
        switch {
        case k == 1:
            fmt.Println("k = ",k)
        case k == 2:
            fmt.Println("k = ",k)
        case k == 3:
            fmt.Println("k = ",k)
        default:       
            fmt.Println("default case")
        }
    }

上面這一種 Switch 語句其實和 if-else 語句差不多。

    import "fmt"

    func main() {
        k := 2
        switch k {
        case 1:
            fmt.Println("k = ",k)
        case 2:
            fmt.Println("k = ",k)
        case 3:
            fmt.Println("k = ",k)
        default:       
            fmt.Println("default case")
        }
    }

注意:case 后面的常量不可以重復

多個條件的case 語句

多個條件的 case 語句和單個沒有什么差別,只是選擇的范圍大了一點:

    import "fmt"

    func main() {
        k := 4
        switch k {
        case 1, 2, 3:
            fmt.Println("k = ",k)
        case 4, 5, 6:
            fmt.Println("k = ",k)
        case 7, 8, 9:
            fmt.Println("k = ",k)
        default:       
            fmt.Println("default case")
        }
    }

所有的常量還是不可以重復

每一個 case 分支都是唯一的,從上至下逐一測試,直到匹配為止。
Go 語言使用快速的查找算法來測試 switch 條件與 case 分支的匹配情況,直到算法匹配到某個 case 或者進入 default 條件為止。
一旦成功地匹配到某個分支,在執行完相應代碼后就會退出整個 switch 代碼塊,也就是說您不需要特別使用 break 語句來表示結束。

Type Switch

switch 語句還可以被用於 type-switch 來判斷某個 interface 變量中實際存儲的變量類型。
例如:

    import "fmt"

    func main() {
        var t interface{}
        switch t.(type) {
        case int:
            fmt.Println("int")
        case string:
            fmt.Println("string")
        case bool:
            fmt.Println("bool")
        case float64:
            fmt.Println("float64")
        default:
            fmt.Println("default interface")

        }
    }

根據接口的類型來確定要執行的代碼。

Switch 穿透

如果在執行完每個分支的代碼后,還希望繼續執行后續分支的代碼,可以使用 fallthrough 關鍵字來達到目的。
fallthrough 只能穿透一層,意思是它讓你直接執行下一個 case 的語句,而且不需要判斷條件。

    import "fmt"

    func main() {
        i := 3
        switch i {
        case 1, 2:
            fmt.Println("1,2")
            fallthrough
        case 3, 4:
            fmt.Println("3,4")
            fallthrough
        case 5, 6:
            fmt.Println("5,6")
            fallthrough
        default:
            fmt.Println("default case")
        }
        // 結果:
        // 3,4
        // 5,6
        // default case 
    }

switch 語句中,只要遇到 fallthrough 就會往一下個 case 中穿透。



關注公眾號,隨時獲取最新資訊

細節決定成敗!
個人愚見,如有不對,懇請斧正!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM