从零开始学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!

posted @ 2019-07-02 12:39  VingB2by  阅读(154)  评论(0编辑  收藏  举报