自信地构建并发 Go 应用程序。学习生产环境就绪的 goroutine、通道、 worker pool 和优雅关闭模式,避免竞态条件和资源泄漏。
下载技能 ZIP
在 Claude 中上传
前往 设置 → 功能 → 技能 → 上传技能
开启并开始使用
测试它
正在使用“go-concurrency-patterns”。 创建一个有 3 个 worker 的 worker pool,从通道处理任务
预期结果:
这是一个使用 3 个 worker 的 worker pool 实现,它并发处理任务并通过结果通道收集结果,使用 sync.WaitGroup 进行正确的同步。
正在使用“go-concurrency-patterns”。 展示如何使用 errgroup 进行并发 HTTP 请求
预期结果:
此示例演示了 golang.org/x/sync/errgroup 用于并发获取多个 URL,其中第一个错误通过上下文传播取消所有待处理的请求。
正在使用“go-concurrency-patterns”。 实现信号量来限制并发操作
预期结果:
我提供两种信号量方法:使用 golang.org/x/sync/semaphore.Weighted 实现加权信号量,以及使用基于通道的 struct{} 信号量实现简单的速率限制。
安全审计
安全All 44 static analysis findings are false positives from markdown-enclosed Go code examples. The skill contains legitimate educational content about Go concurrency patterns with no executable code or security risks.
质量评分
你能构建什么
构建并发微服务
创建可扩展的 Go 服务,使用 worker pool 同时处理多个请求,同时高效管理资源
实现数据处理流水线
设计扇出/扇入流水线,以正确的错误处理和取消机制并行处理大型数据集
调试竞态条件
使用正确的同步模式和竞态检测工具识别并修复现有 Go 代码中的并发错误
试试这些提示
教我如何在 Go 中创建一个 worker pool,使用 5 个并发 worker 处理 100 个任务
编写一个支持优雅关闭的 Go 服务器,处理 SIGTERM 信号并等待处理中的请求完成
在 Go 中创建一个扇出/扇入流水线,每个阶段使用 5 个 worker 处理 3 个阶段的项目
审查这段 Go 代码,识别潜在的 goroutine 泄漏,然后展示如何使用上下文取消来修复它们
最佳实践
- 始终使用 context.Context 进行并发操作中的取消和截止时间
- 仅从发送方关闭通道,以避免 panic
- 优先使用通道而不是互斥锁进行 goroutine 之间的通信
- 使用 sync.WaitGroup 或 errgroup 等待 goroutine 完成
避免
- 使用 time.Sleep 进行同步,而不是使用通道或 WaitGroup 等正确的原语
- 从接收方关闭通道,这会导致 panic
- 忘记检查 ctx.Done(),导致 goroutine 泄漏
- 在 goroutine 之间共享内存而没有正确的同步