select 是 Go 中的一个控制结构,类似于通信的switch 语句,每个case必须是一个通信操作,要么发送要么接收。
select 随机执行一个可运行的 case。
如果没有case 可运行,它将阻塞,直到有case 可运行。
一个默认的字句,总应该是可运行的。
package main
import "fmt"
func main(){
var c1, c2, c3 chan int
var i1, i2 int
select {
case i1 = <-c1:
fmt.Printf("received", i1, "from c1\n")
case i2 = <-c2:
fmt.Printf("sent ",i2, "to c2\n")
case i3, ok := (<-c3):
if ok{
fmt.Printf("received ",c3, "from c3\n")
}else{
fmt.Printf("c3 is closed\n")
}
default:
fmt.Printf("no comminucation\n")
}
}