chan在select语句中如果其他case符合就会直接执行其他case的内容,而不会阻塞等结果
如果没有其他case符合就会阻塞等结果。
func TestChan(t *testing.T) {
ts := time.Now().Unix()
c := make(chan int, 1)
go func() {
for v := range c {
time.Sleep(1*time.Second)
t.Log("out", v, "t:", time.Now().Unix()-ts)
}
}()
for i := 0; i < 5; i++{
c <- i
t.Log("fill", i, "t:", time.Now().Unix()-ts)
select {
case c <- i:
t.Log("fill", i, "in select", "t:", time.Now().Unix()-ts)
default:
t.Log("full", "t:", time.Now().Unix()-ts)
}
}
}