关于Channel遇见的坑
- 使用select监听通道时,通道会被阻塞直到当前case执行完毕。
func TestChannel(t *testing.T) {
strChan:=make(chan string,10)
go func() {
for {
strChan <- time.Now().String()
time.Sleep(600*time.Millisecond)
}
}()
ticker := time.NewTicker(250 * time.Millisecond)
for {
select {
case str:=<-strChan:
fmt.Println(str)
time.Sleep(800*time.Millisecond)
case <-ticker.C:
fmt.Println(len(strChan))
}
}
}
上述代码中定时输出的chan长度并不总是0,可自己运行查看下,因为当case未执行完时,其chan被阻塞了
1254

被折叠的 条评论
为什么被折叠?



