Agent Skills
返回列表
💻

Go 并发模式

开发编程 更新于 2026.08.29

将以下提示词粘贴到你的 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()` 整理成可测试的工作池或管道结构