switch
- 寻找匹配的case,执行完后即退出switch
func judgeType(i interface{}) {
switch i.(type) {
case bool:
fmt.Println("bool")
case int:
fmt.Println("int")
case string:
fmt.Println("string")
default:
fmt.Println("unknown")
}
}
select
- select只能用于channel的操作,channel不阻塞,则该case可以执行
- 如果有多个case都可以执行,select会随机公平地选出一个执行,其他不会执行
- 如果没有可执行的case语句,但有default语句,那么就会执行default的动作
- 如果没有可执行的case语句,且没有default语句,select将阻塞,直到某个case可以执行
ch := make(chan int,1)
select {
case <-ch:
fmt.Println(1)
case ch<-2:
fmt.Println(2)
default:
fmt.Println(3)
}
/*******************
2
*******************/