主题
select 多路复用
1. select 语法
select
可以监听多个通道的操作,等待其中一个准备好执行:
go
select {
case msg1 := <-ch1:
fmt.Println("Received from ch1:", msg1)
case ch2 <- 10:
fmt.Println("Sent 10 to ch2")
default:
fmt.Println("No channel ready")
}
2. 使用场景
- 同时等待多个通道的读写
- 实现超时机制
- 优雅处理多个异步任务
3. 示例:超时处理
go
select {
case msg := <-ch:
fmt.Println("Received:", msg)
case <-time.After(time.Second * 2):
fmt.Println("Timeout")
}
4. 注意事项
select
会阻塞直到某个 case 可以执行default
分支可防止阻塞
select
是 Go 并发编程中强大的多路复用工具。