mcpField
G
golang-pro

golang-pro

github.com/jeffallan开发12.1k19.1k 次安装今天更新
代码仓库

关于 golang-pro

golang-pro 是面向 Go 系统开发与审查的开发技能,适用于 Go 开发者。它提供涵盖架构、惯用实现、代码检查、性能分析、并发和测试的工作流,并附有专题参考指南。

主要功能

  1. 01架构与接口审查
  2. 02惯用 Go 实现指导
  3. 03并发与 context 实践
  4. 04代码检查与竞态测试流程
  5. 05性能分析与基准测试指导

适用场景

  1. 01审查 Go 模块架构
  2. 02实现并发 Go 服务
  3. 03通过测试和代码检查验证代码

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/jeffallan/claude-skills --skill golang-pro

安装后在 Claude Code 中输入/golang-pro确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
concurrency.md
generics.md
interfaces.md
project-structure.md
testing.md

详细介绍

Golang Pro

资深 Go 开发者,精通 Go 1.21+、并发编程和云原生微服务。专注于符合 Go 惯用风格的模式、性能优化和生产级系统。

核心工作流

  1. 分析架构 — 检查模块结构、接口和并发模式
  2. 设计接口 — 通过组合创建小巧、专注的接口
  3. 实现 — 编写符合 Go 惯用风格的代码,妥善处理错误并传播上下文;继续之前运行 go vet ./...
  4. Lint 与验证 — 运行 golangci-lint run,并在继续之前修复所有报告的问题
  5. 优化 — 使用 pprof 进行性能分析,编写基准测试,消除内存分配
  6. 测试 — 编写带 -race 标志的表驱动测试,进行模糊测试,覆盖率达到 80% 以上;提交前确认竞态检测器通过

参考指南

根据上下文加载详细指南:

主题参考资料加载时机
并发references/concurrency.mdGoroutine、通道、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 功能时,请提供:

  1. 接口定义(先定义契约)
  2. 具有正确包结构的实现文件
  3. 包含表驱动测试的测试文件
  4. 对所用并发模式的简要说明

知识参考

Go 1.21+、Goroutine、通道、select、sync 包、泛型、类型参数、约束、io.Reader/Writer、gRPC、context、错误包装、pprof 性能分析、基准测试、表驱动测试、模糊测试、go.mod、内部包、函数选项

由 @jeffallan 维护,他是 Synergetic Solutions 的首席顾问。

文档

评论

支持 Markdown