使用select,两个case 读取 同一个chan 中的数据,两个case都可能被执行到
package main
func main() {
ch := make(chan int)
go func() {
for {
select {
case l := <-ch:
println(l) // 可能是执行这个
case l2 := <-ch:
println(l2) // 也有可能执行这个
}
}
}()
for {
ch <- 1
}
}
自己理解的select
- 每次select只选择一个有数据的通道执行,执行完毕后返回继续select
- 每次select都把case打乱,从上往下执行,直到找到一个有数据的通道
- 如果case中的代码很耗时,可以用time.Sleep测试,是不会继续进行下一次select的。
本作品采用《CC 协议》,转载必须注明作者和本文链接