从零开始学Go之并发(三):Select
select 是 Go 中类似于用于通信的 switch 语句。每个 case 必须是一个通信操作,要么是发送要么是接收
select 随机执行一个可运行的 case,如果没有 case 可运行,它将阻塞,直到有 case 可运行
一个默认的子句应该总是可运行的
当select中的其它分支都没有准备好时,default分支就会执行
select {
case 操作
}
select { case c <- x: x, y = y, x+y case <-quit: fmt.Println("quit") return }
例子:
func main() { tick := time.Tick(100 * time.Millisecond) boom := time.After(500 * time.Millisecond) for { select { case <-tick: fmt.Println("tick.") case <-boom: fmt.Println("BOOM!") return default: fmt.Println(" .") time.Sleep(50 * time.Millisecond) } } }
运行结果:
.
.
tick.
.
.
tick.
.
.
tick.
.
.
tick.
.
.
tick.
BOOM!