代码点读机 / Go / select

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

官方文档:https://go.dev/ref/spec#Select_statements

在代码里遇到不认识的词?打开代码点读机,点一下就懂 → ← Go全部词条