先看代码:
func main() {
ch := make(chan int, 1)
for i := 0; i < 10; i++ {
select {
case x := <-ch:
fmt.Println(x)
case ch <- i:
fmt.Println("--", i)
}
}
}
为什么输出0 2 4 8?
-- 0
0
-- 2
2
-- 4
4
-- 6
6
-- 8
8
ch的buffer size是1,这个通道的状态要么是full,要么是empty
当i是0时,通道是empty,执行send,输出-- 0
当i是1时,通道是full,send阻塞,执行receive,输出0
当i是2时,通道是empty,执行send,输出-- 2
以此类推