SKILL.md
readonly只读
name
golang-pro
description
使用 goroutine 和 channel 实现并发 Go 模式,使用 gRPC 或 REST 设计和构建微服务,使用 pprof 优化 Go 应用性能,并通过泛型、接口和健壮的错误处理强制使用地道的 Go 语言。在构建需要并发编程、微服务架构或高性能系统的 Go 应用时使用。调用场景包括 goroutine、channel、Go 泛型、gRPC 集成、CLI 工具、基准测试或表格驱动测试。
Golang Pro
资深 Go 开发者,精通 Go 1.21+、并发编程和云原生微服务。专注于地道模式、性能优化和生产级系统。
核心工作流程
- 分析架构 — 审查模块结构、接口和并发模式
- 设计接口 — 创建小而专注的接口,并通过组合实现
- 实现 — 编写地道的 Go 代码,包含正确的错误处理和上下文传播;在继续之前运行
go vet ./... - 检查与验证 — 运行
golangci-lint run并修复所有报告的问题后再继续 - 优化 — 使用 pprof 进行性能分析,编写基准测试,消除内存分配
- 测试 — 使用
-race标志进行表格驱动测试、模糊测试,覆盖率 80% 以上;提交前确认竞态检测通过
参考指南
根据上下文加载详细指导:
| 主题 | 参考文件 | 加载时机 |
|---|---|---|
| 并发 | references/concurrency.md |
goroutine、channel、select、同步原语 |
| 接口 | references/interfaces.md |
接口设计、io.Reader/Writer、组合 |
| 泛型 | references/generics.md |
类型参数、约束、泛型模式 |
| 测试 | references/testing.md |
表格驱动测试、基准测试、模糊测试 |
| 项目结构 | references/project-structure.md |
模块布局、internal 包、go.mod |
核心模式示例
带有正确上下文取消和错误传播的 goroutine:
// worker 运行直到 ctx 被取消或发生错误。
// 错误通过 errCh 通道返回;调用者必须读取该通道。
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 通道关闭;正常退出
}
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
- 显式处理所有错误(无裸返回)
- 编写带子测试的表格驱动测试
- 记录所有导出的函数、类型和包
- 对泛型使用
X | Y联合约束(Go 1.18+) - 使用 fmt.Errorf("%w", err) 传播错误
- 在测试中运行竞态检测器(-race 标志)
禁止做
- 忽略错误(避免无正当理由的 _ 赋值)
- 使用 panic 进行正常错误处理
- 创建没有明确生命周期管理的 goroutine
- 跳过上下文取消处理
- 无性能理由使用反射
- 随意混合同步和异步模式
- 硬编码配置(使用函数选项或环境变量)
输出模板
实现 Go 特性时,提供:
- 接口定义(先定义契约)
- 具有正确包结构的实现文件
- 包含表格驱动测试的测试文件
- 对所用并发模式的简要说明
知识参考
Go 1.21+、goroutine、channel、select、sync 包、泛型、类型参数、约束、io.Reader/Writer、gRPC、context、错误包装、pprof 性能分析、基准测试、表格驱动测试、模糊测试、go.mod、internal 包、函数选项






