Go 并发模式
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @org-02qudk26/go-concurrency-patterns-zh。
技能介绍
要解决什么问题
Go 里「开 goroutine 很容易、关干净很难」是常见痛点:工作池和管道怎么拆、channel 该传什么、竞态在 race detector 之外怎么排查、context 取消后下游是否真的会停,以及进程退出时 goroutine 是否还在写共享状态——这些问题若只靠零散博客片段拼凑,很容易在生产环境踩坑。
技能如何帮你落地
本技能把面向生产的并发模式收成可执行的决策路径,而不是泛泛讲语法:
- 通信与同步:何时用 channel 传递所有权、何时用
sync.Mutex/WaitGroup做边界,避免「一切 channel 化」或「一切加锁」两种极端。 - 结构与生命周期:工作池、fan-in/fan-out、管道阶段的职责划分,以及用
context.Context统一取消、超时和请求级 trace 的传递方式。 - 关闭与可观测性:优雅关闭的顺序(停止接收 → 排空 → 等待 worker)、与竞态相关的常见写法和验证思路。
使用时应先写清目标、约束和必需输入,再按模式套用并给出可验证的步骤(例如:取消后 goroutine 数量是否归零、关闭 channel 后是否 panic)。更完整的模式说明与示例见 resources/implementation-playbook.md。
适用边界
任务与 Go 并发无关、或需要的是本技能范围外的语言/运行时/工具链时,不必启用。它聚焦 Go 标准库与惯用并发模型,不替代你对具体业务 SLA 和性能 profiling 的判断。
使用场景
- 微服务里用 goroutine 处理批量回调,需要把工作池大小、队列背压和 `context` 超时设计成可预期行为
- 数据管道分多段清洗与聚合,要用 channel 串联各 stage 并保证上游取消时下游不再阻塞
- HTTP 服务收到 SIGTERM 后,要按顺序停接新请求、排空 in-flight 任务并等待后台 worker 退出
- 共享 map 或计数器在压测下出现偶发错误,需要用竞态排查思路对照 channel/锁 的使用是否一致
适合人员
- 维护 Go 后台服务的后端工程师,要在不拖垮 CPU 的前提下并行处理队列任务并保证取消可传播
- 负责发布与滚更的 SRE,需要为带 goroutine 的进程设计优雅关闭与就绪/存活探针行为
- 在 Code Review 中审查并发改动的 Tech Lead,希望对照生产级模式检查 channel 关闭与 `WaitGroup` 用法
- 刚接手遗留 Go 项目的开发者,要把散落的 `go func()` 整理成可测试的工作池或管道结构