通过示例理解 Golang 中的 Select
Go 中的 select 只做一件事:同时等待多个通道,并对第一个可用的通道采取行动。
换句话说,select 是一个特定于通道的 switch-case 语句。
1. 最小语法
select {
case v := <-ch1: // 从 ch1 获取
    fmt.Println("got", v, "from ch1")
case ch2 <- 42: // 发送到 ch2
    fmt.Println("sent 42 to ch2")
default: // 如果所有 case 都未就绪,则立即运行 => 非阻塞
    fmt.Println("no channel ready")
}
2. 它有什么用途?
- 
多路复用 I/O:将多个事件源组合成一个 goroutine。
 - 
超时/取消:组合 time.After。
 - 
非阻塞发送/接收:使用默认值。
 - 
公平性(随机化):如果多个用例就绪,Go 会随机选择(不按顺序)。
 
