SuperAPI AI 工具集

go-concurrency

编程与开发

查看项目

更新于 10-26 17:21

技能介绍

Go Concurrency 是一个针对 Go 并发编程的技能插件,主要用途是在编写或审查 Go 并发代码时提供规范、模式和检查清单。资料说明其覆盖 goroutine、channel、errgroup、context 取消以及 goroutine 泄漏,目标是 Go 1.27,重点强调被记录最多的陷阱:无缓冲 channel 加提前返回导致 goroutine 泄漏。它明确不适用于顺序式惯用法场景。

主要能力方面,资料列出六项:goroutine 与 channel 提供轻量并发和带类型通信;errgroup 用于并行执行、错误聚合与 context 取消;context 作为首参数严格传递,携带取消和截止时间;WaitGroup 与 channel 的取舍,前者仅计数,后者传递结果或错误;竞态检测器通过测试和 CI 中的 -race 捕获数据竞争;泄漏分析支持 pprof.Lookup("goroutineleak") 和 /debug/pprof/goroutineleak,且在 1.27 中无需 GOEXPERIMENT。

使用方式上,资料规定了强制代理工作流:任何实现之前并行启动三个代理,分别探索代码库中现有的 goroutine、channel、context 用法,通过 Context7 或 Exa 核验 errgroup 与 context 文档,以及用 mcp__context7__query-docs 确认 golang.org/x/sync/errgroup 签名;实现之后运行 fuse-ai-pilot:sniper 验证,并用 go test -race ./... 运行测试。资料提供了 errgroup 有界并发的示例代码和缓冲 channel 避免泄漏的示例,并给出目录结构参考,包括 fetch 包中的 errgroup.WithContext 扇出与 worker 池,以及 pipeline 包中可被 ctx 取消的阶段和带缓冲交接通道。

关键规则包括:context.Context 必须是首参数,命名为 ctx,不存入结构体;每个启动的 goroutine 都必须能退出,否则会泄漏;带错误的扇出优先用 errgroup,它负责等待、返回首个错误并取消;无缓冲 channel 加提前返回即泄漏,发送方会永久阻塞,应使用缓冲或排空;测试必须带 -race。最佳实践中的禁止项包括:在 goroutine 仍阻塞于无缓冲 channel 时提前返回、把 context 存入结构体字段、在 goroutine 返回错误时使用裸 sync.WaitGroup、以及假设未加 -race 的测试不存在竞态。

适用场景为 Go 并发代码的编写、审查、重构和测试验证。限制在于资料未提供安装命令、版本兼容细节、收费信息以及具体性能数据,这些事实暂未提供。