Go 语言 pipeline 模式通过 channel 串联“生产-处理-消费”阶段,各阶段为独立函数,接收输入 channel 并返回输出 channel,内部启 goroutine 处理,输入类型统一且关闭后下游自然退出。
Go 语言中的 pipeline 模式是一种通过组合多个阶段(每个阶段由一个或多个 goroutine 构成)来处理数据流的惯用方式,核心是使用 channel 串联“生产-处理-消费”流程,实现解耦、并发与可控背压。
每个 pipeline 阶段应是一个独立函数,接收输入 channel,返回输出 channel,内部启动 goroutine 处理数据。避免在单个函数中混入多种逻辑。
chan int),关闭后下游可自然退出for range 读取输入,显式关闭输出 channel(除非需持续接收)将前一阶段的输出 channel 直接作为下一阶段的输入,构成流水线。支持串行(A→B→C)或扇出/扇入(如多个 worker 并行处理同一输入)。
result := stageC(stageB(stageA(source)))
merge 函数合并多个 output channel 到一个 channel(可用 
select + goroutine 实现)原始 pipeline 在某个阶段 panic 或阻塞时可能造成 goroutine 泄漏。引入 done 参数可安全取消所有阶段。
for range 中加入 select 检查 done
context.Context 替代裸 done channel,便于超时与层级取消无缓冲 channel 要求收发双方同时就绪,易导致阻塞;过度缓冲又可能吃光内存。合理选择缓冲策略:
make(chan T, 16))缓解瞬时延迟