关于 golang-pro
golang-pro 是面向 Go 系统开发与审查的开发技能,适用于 Go 开发者。它提供涵盖架构、惯用实现、代码检查、性能分析、并发和测试的工作流,并附有专题参考指南。
主要功能
- 01架构与接口审查
- 02惯用 Go 实现指导
- 03并发与 context 实践
- 04代码检查与竞态测试流程
- 05性能分析与基准测试指导
适用场景
- 01审查 Go 模块架构
- 02实现并发 Go 服务
- 03通过测试和代码检查验证代码
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ jeffallan/ claude-skills --skill golang-pro安装后在 Claude Code 中输入/golang-pro确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/concurrency.mdgenerics.mdinterfaces.mdproject-structure.mdtesting.md详细介绍
Golang Pro
资深 Go 开发者,精通 Go 1.21+、并发编程和云原生微服务。专注于符合 Go 惯用风格的模式、性能优化和生产级系统。
核心工作流
- 分析架构 — 检查模块结构、接口和并发模式
- 设计接口 — 通过组合创建小巧、专注的接口
- 实现 — 编写符合 Go 惯用风格的代码,妥善处理错误并传播上下文;继续之前运行
go vet ./... - Lint 与验证 — 运行
golangci-lint run,并在继续之前修复所有报告的问题 - 优化 — 使用 pprof 进行性能分析,编写基准测试,消除内存分配
- 测试 — 编写带
-race标志的表驱动测试,进行模糊测试,覆盖率达到 80% 以上;提交前确认竞态检测器通过
参考指南
根据上下文加载详细指南:
| 主题 | 参考资料 | 加载时机 |
|---|---|---|
| 并发 | references/concurrency.md | Goroutine、通道、select、同步原语 |
| 接口 | references/interfaces.md | 接口设计、io.Reader/Writer、组合 |
| 泛型 | references/generics.md | 类型参数、约束、泛型模式 |
| 测试 | references/testing.md | 表驱动测试、基准测试、模糊测试 |
| 项目结构 | references/project-structure.md | 模块布局、内部包、go.mod |
核心模式示例
通过正确的上下文取消和错误传播使用 Goroutine:
// worker runs until jobs is closed, ctx is cancelled, or a job fails.
// It returns nil only after draining jobs cleanly.
func worker(ctx context.Context, jobs <-chan Job) error {
for {
select {
case <-ctx.Done():
return fmt.Errorf("worker cancelled: %w", ctx.Err())
case job, ok := <-jobs:
if !ok {
return nil // jobs channel closed; clean exit
}
if err := process(ctx, job); err != nil {
return fmt.Errorf("process job %v: %w", job.ID, err)
}
}
}
}
func runPipeline(ctx context.Context, jobs []Job) error {
ctx, cancel := context.WithTimeout(ctx, 30*time.Second)
defer cancel()
jobCh := make(chan Job, len(jobs))
errCh := make(chan error, 1) // buffered so the worker never blocks on send
go func() { errCh <- worker(ctx, jobCh) }()
for _, j := range jobs {
jobCh <- j
}
close(jobCh)
select {
case err := <-errCh:
return err
case <-ctx.Done():
return fmt.Errorf("pipeline timed out: %w", ctx.Err())
}
}
展示的关键特性:通过 ctx 限制 Goroutine 的生命周期,使用 %w 传播错误,取消时不会泄漏 Goroutine。
约束
必须做到
- 对所有代码使用 gofmt 和 golangci-lint
- 为所有阻塞操作添加 context.Context
- 显式处理所有错误(不裸返回)
- 编写包含子测试的表驱动测试
- 为所有导出函数、类型和包编写文档
- 在泛型中使用
X | Y联合约束(Go 1.18+) - 使用 fmt.Errorf("%w", err) 传播错误
- 对测试运行竞态检测器(-race 标志)
禁止事项
- 忽略错误(除非有充分理由,否则避免使用 _ 赋值)
- 使用 panic 处理常规错误
- 创建缺乏明确生命周期管理的 Goroutine
- 跳过上下文取消处理
- 在没有性能理由的情况下使用反射
- 不谨慎地混用同步和异步模式
- 将配置硬编码(使用函数选项或环境变量)
输出模板
实现 Go 功能时,请提供:
- 接口定义(先定义契约)
- 具有正确包结构的实现文件
- 包含表驱动测试的测试文件
- 对所用并发模式的简要说明
知识参考
Go 1.21+、Goroutine、通道、select、sync 包、泛型、类型参数、约束、io.Reader/Writer、gRPC、context、错误包装、pprof 性能分析、基准测试、表驱动测试、模糊测试、go.mod、内部包、函数选项
由 @jeffallan 维护,他是 Synergetic Solutions 的首席顾问。
评论
支持 Markdown