go 对于多个channel读取,提供了select关键字,用于处理异步io的问题
case中的语句总是都被求值的,求值顺序为从上至下,从左到右,无论是case否执行,当多个case都满足的时候会随机选择case执行,因此下面的函数实现了,随机写入0和1
[source lang=”c”]
import "fmt"
func main(){
ch := make(chan int, 1)
for i := 0; i < 10; i++ {
select {
case ch <- 0:
fmt.Println("Write 0")
case ch <- 1:
fmt.Println("Write 1")
default: // 如果以上两者都不满足
fmt.Println("default")
}
i := <- ch
fmt.Println("Read value: ", i)
}
}
[/source]