山高月小,水落石出。

Goroutine Select

Go select 详解与可运行示例 一、本质:select 是什么 select 是 Go 里唯一的多路 channel 操作原语。它让一个 goroutine 同时等待多个 channel 操作,哪个先就绪就走哪个。没有它,你要么串行阻塞在单个 channel 上,要么自己开 goroutine 轮询。 一句话定位:switch 是对值的分支,select 是对通道就绪状态的分支。 1 2 3 4 5 6 7 8 9 10 select { case v := <-ch1: // ch1 有数据可读 handle(v) case ch2 <- x: // ch2 有接收者就绪 // 发送成功 case <-time.After(time.Second): // 超时 // ... default: // 所有 case 都没就绪 // 不阻塞,立即走这里 } 二、语法与语义规则 规则 1:case 必须是 channel 操作 合法:<-ch、ch <- v、v, ok := <-ch。 非法:普通表达式、函数调用(case f(): 不行)、常量比较。 ...

October 12, 2026 · 13 min · zwdart