说白一点就是谁来的快收谁。通常情况,接收和发送必须成对出现,否则会阻塞。如果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!")
}
本文通过Go语言的select关键字演示了如何在并发环境中处理通道通信。示例中,一个模拟火箭发射的程序展示了select如何在没有接收到任何通道值时避免阻塞,而使用default子句来执行默认操作。程序先进行倒计时,然后触发发射。
989

被折叠的 条评论
为什么被折叠?



