select Go · 关键字
同时等待多个通道操作,哪个先就绪就执行哪个分支;如果都未就绪,有 default 则走 default。
怎么用
select { case <-ch: ... case ch <- v: ... default: ... }
小例子
package main
import "fmt"
func main() {
ch1 := make(chan int)
ch2 := make(chan int, 1)
select {
case v := <-ch1:
fmt.Println(v)
case ch2 <- 1:
fmt.Println("发送")
}
}
运行结果
输出 发送
提醒:select 会随机选择一个可执行的 case;所有 case 都阻塞时,若有 default 则立即执行 default
在代码里遇到不认识的词?打开代码点读机,点一下就懂 → ← Go全部词条