当 select 中的其它分支都没有准备好时,default 分支就会执行。
为了在尝试发送或者接收时不发生阻塞,可使用 default 分支:
package mainimport ("fmt""time")func main() {tick := time.Tick(1 * time.Millisecond)boom := time.After(100000 * time.Microsecond)for {select {case <-tick:fmt.Println("tick")case <-boom:fmt.Println("boom")returndefault:fmt.Println(" .")time.Sleep(5 * time.Millisecond)}}}
因为不知道为什么这里会用到<-,所以测试了下
package mainimport ("fmt""time")func main() {for {boom := time.After(1000 * time.Microsecond)fmt.Println(<-boom)time.Sleep(5000 * time.Millisecond)}}
