标签 switch 下的文章

Golang的Switch与Select的逻辑,和其他语言不同。一不留神就是个坑。


多个Case中时,第一个case总是被抛弃的,同时也不会进到default里面。


如下的例子:

a := 2

switch a {

case 2:

case 3:

    fmt.Println("第一个case")

case 4, 5:

    fmt.Println("第二个case")

default:

    fmt.Println("Default")

}


当a=2时,没有任何输出。无论第一个打印,还是default都没有。

当a=3时,输出“第一个case”。

当a=4时,输出“第二个case”。

当a=5时,输出“第二个case”。

当a=其他值时,才输出default。


和switch一样,select是相同的逻辑和分支走向。


c1 := make(chan int, 10)

c2 := make(chan int, 10)

c1<-1

select{

case <-c1:

case <-c2:

    fmt.Println("进来了")

default:

    fmt.Println("default")

}

此时虽然c1有值,但是c1在select中是被抛弃的,所以无任何输出。

把c1<-1改成c2<-1,输出“进来了”。

当c1和c2都没有值,才会进入到default中。

另外,switch可以case1,2这样逗号分隔,同一行的case中写多个值,这种写法在select中是不行的。