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