go channel select

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]

发表评论

电子邮件地址不会被公开。 必填项已用*标注