package main
import "fmt"
func main() {
ch := make(chan int , 1)
j := 0
for {
select {
case ch <- 0:
case ch <- 1:
}
i := <-ch
if(j>10){
break;
}
j++;
fmt.Println("Value recevied:", i)
}
}
我的理解是循环中每次向 ch 中写入数据 ch 有可能是阻塞的,这种情况下 ch 的缓冲区是是1,
但是我把 ch 缓冲区长度改为 10 ch := make(chan int , 10)
好像也并没有用,还是随机的
If one or more of the communications can proceed, a single one that can proceed is chosen via a uniform pseudo-random selection.
看这里,http://doc.golang.org/ref/spec#Select_statements