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 中穿透。



关注公众号,随时获取最新资讯

细节决定成败!
个人愚见,如有不对,恳请斧正!

posted @ 2022-01-12 00:58  一点浩然气~  阅读(1183)  评论(0编辑  收藏  举报