说白一点就是谁来的快收谁。通常情况,接收和发送必须成对出现,否则会阻塞。如果select配合default则不会阻塞。
func main() {
var c1, c2 chan int
select {
case n := <-c1:
fmt.Println("Received from c1:", n)
case n := <-c2:
fmt.Println("Received from c2:", n)
default:
fmt.Println("No value received")
}
}
//=>No value received
模拟一个火箭发射程序
func main() {
fmt.Println("Commencing countdown.")
/*
time.Tick函数返回一个channel,程序会周期性地像一个节拍器一样向这个channel发送事件。
*/
tick := time.Tick(1 * time.Second)
for countdown := 10; countdown > 0; countdown-- {
fmt.Println(countdown)
<-tick
}
launch()
}
func launch() {
fmt.Println("Lift off!")
}