mcpField
G
golang-pro

golang-pro

github.com/farmage开发224288 次安装5 周前更新
代码仓库

关于 golang-pro

面向 Go 开发的专业技能指南,聚焦并发、惯用模式和云原生微服务,并通过测试、性能分析与静态检查规范开发流程。

主要功能

  1. 01接口与项目结构设计
  2. 02并发和上下文管理
  3. 03错误处理与代码检查
  4. 04表驱动测试、模糊测试和基准测试
  5. 05pprof 性能分析

适用场景

  1. 01设计 Go 微服务架构
  2. 02实现可取消的并发任务
  3. 03排查性能瓶颈并验证竞态

安装

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

$npx skills add https://github.com/farmage/opencode-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模块布局、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 功能时,请提供:

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

知识参考

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

文档

评论

支持 Markdown