关于 golang-pro
面向 Go 开发的专业技能指南,聚焦并发、惯用模式和云原生微服务,并通过测试、性能分析与静态检查规范开发流程。
主要功能
- 01接口与项目结构设计
- 02并发和上下文管理
- 03错误处理与代码检查
- 04表驱动测试、模糊测试和基准测试
- 05pprof 性能分析
适用场景
- 01设计 Go 微服务架构
- 02实现可取消的并发任务
- 03排查性能瓶颈并验证竞态
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ farmage/ opencode-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 | 模块布局、internal 包、go.mod |
核心模式示例
正确处理上下文取消和错误传播的 Goroutine:
// worker runs until ctx is cancelled or an error occurs.
// Errors are returned via the errCh channel; the caller must drain it.
func worker(ctx context.Context, jobs <-chan Job, errCh chan<- error) {
for {
select {
case <-ctx.Done():
errCh <- fmt.Errorf("worker cancelled: %w", ctx.Err())
return
case job, ok := <-jobs:
if !ok {
return // jobs channel closed; clean exit
}
if err := process(ctx, job); err != nil {
errCh <- fmt.Errorf("process job %v: %w", job.ID, err)
return
}
}
}
}
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)
go worker(ctx, jobCh, errCh)
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
- 显式处理所有错误(不使用裸 return)
- 编写带子测试的表驱动测试
- 为所有导出的函数、类型和包编写文档
- 对泛型使用
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、internal 包、函数选项
评论
支持 Markdown