select 中的其它分支都没有准备好时,default 分支就会执行。
    为了在尝试发送或者接收时不发生阻塞,可使用 default 分支:

    1. package main
    2. import (
    3. "fmt"
    4. "time"
    5. )
    6. func main() {
    7. tick := time.Tick(1 * time.Millisecond)
    8. boom := time.After(100000 * time.Microsecond)
    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(5 * time.Millisecond)
    19. }
    20. }
    21. }

    因为不知道为什么这里会用到<-,所以测试了下

    1. package main
    2. import (
    3. "fmt"
    4. "time"
    5. )
    6. func main() {
    7. for {
    8. boom := time.After(1000 * time.Microsecond)
    9. fmt.Println(<-boom)
    10. time.Sleep(5000 * time.Millisecond)
    11. }
    12. }