默认选择

select 中的其它分支都没有准备好时,default 分支就会执行。

为了在尝试发送或者接收时不发生阻塞,可使用 default 分支:

  1. select {
  2. case i := <-c:
  3. // 使用 i
  4. default:
  5. // 从 c 中接收会阻塞时执行
  6. }

default-selection.go

  1. package main
  2. import (
  3. "fmt"
  4. "time"
  5. )
  6. func main() {
  7. tick := time.Tick(100 * time.Millisecond)
  8. boom := time.After(500 * time.Millisecond)
  9. for {
  10. select {
  11. case <-tick:
  12. fmt.Println("tick.")
  13. case <-boom:
  14. fmt.Println("BOOM!")
  15. return
  16. default:
  17. fmt.Println(" .")
  18. time.Sleep(50 * time.Millisecond)
  19. }
  20. }
  21. }