Golang 的 select 语句主要用于在多个通信操作中选择一个执行。
语法格式为:
select {
case comm1:
statement1
case comm2:
statement2
default:
default_statement
}
- comm1 是一个通信操作,可能是:
- 一个通道 receive 操作
- 一个通道 send 操作
- statement1 是对应的语句块
- 同理 comm2 对应 statement2
- default 是选择的默认操作
按如下规则执行:
- 可以有多个 case 语句,但只有一个被选择执行
- 如果有 case 可以通信,就执行一个随机的
- 如果没有 case 可运行,就执行 default 操作
- 如多个 case 都可运行,将随机选择一个执行
- case 语句不依赖排列顺序
- 一个 case 可以有多个操作,被选中后会依次执行
举例:
select {
case <-ch1:
// ...
case v := <-ch2:
// ...
case ch3 <-v3:
default:
// ...
}
总的来说,Go语言的 select 语句可以实现:
- 在多个通信操作中选择一个执行
- 可用于通道用法丰富
- 支持 default 执行流
- 如果都可以运行,随机选择一个执行
- 可实现超时控制等功能
它可以很方便地协调多个goroutine之间的通信。