Golang的Switch与Select多个Case的逻辑和其他语言不同
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中是不行的。