1.什么是select
select就是用来监听和channel有关的IO操作,当 IO 操作发生时,触发相应的动作。
2.基本用法
select {
case <- chan1:
pass
case chan2 <- 1:
pass
default:
pass
}
如果有一个,或者多个IO操作可以完成,则golang运行时会随机选择一个执行,否则的话会执行default分支语句,如果没有定义default的话会一直阻塞
3.思考输出
var ch1 chan int
var ch2 chan int
var chs = []chan int{ch1, ch2}
var numbers = []int{1, 2, 3, 4, 5}
func main() {
select {
case getChan(0) <- getNumber(2):
fmt.Println("1th case is selected.")
case getChan(1) <- getNumber(3):
fmt.Println("2th case is selected.")
default:
fmt.Println("default!.")
}
}
func getNumber(i int) int {
fmt.Printf("numbers[%d]\n", i)
return numbers[i]
}
func getChan(i int) chan int {
fmt.Printf("chs[%d]\n", i)
return chs[i]
}