Skip to content
cccskills
FreePublished on GitHub

go-dev

Go 开发规范。当用户操作 .go、go.mod、go.sum 文件,或涉及 Go 后端开发(Gin、GORM、Echo)时触发。包含命名约定、import 顺序、错误处理、并发编程、测试规范、性能优化等。

The English summary is being prepared. Showing the original description.

See how to install

Files included (3)

  • SKILL.md3.5 KB
  • references/date-time.md1.5 KB
  • references/go-style.md11.2 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

Go 开发规范

参考来源: Effective Go、Go Code Review Comments、uber-go/guide


工具链

goimports -w .                    # 格式化并整理 import
go vet ./...                      # 静态分析
golangci-lint run                 # 综合检查
go test -v -race -cover ./...     # 测试(含竞态检测和覆盖率)

命名约定

类型规则示例
包名小写单词,不用下划线user, orderservice
变量/函数驼峰命名,缩写词一致大小写userID, HTTPServer
常量导出用驼峰,私有可驼峰或全大写MaxRetryCount
接口单方法用方法名+erReader, Writer

禁止: common, util, base 等无意义包名


import 顺序

import (
    "context"           // 标准库
    "fmt"

    "github.com/gin-gonic/gin"  // 第三方库

    "project/internal/model"     // 项目内部
)

错误处理

必须处理错误,不能忽略:

// ✅ 好:添加上下文
if err != nil {
    return fmt.Errorf("failed to query user %d: %w", userID, err)
}

// ❌ 差:忽略错误
result, _ := doSomething()

错误包装: 使用 %w 保留错误链,用 errors.Is() / errors.As() 检查


并发编程

基本原则:

  • 优先使用 channel 通信
  • 启动 goroutine 前考虑:谁来等待它?怎么停止它?
  • 使用 context.Context 控制生命周期
// ✅ 好:使用 context 控制
func process(ctx context.Context) error {
    done := make(chan error, 1)
    go func() { done <- doWork() }()

    select {
    case err := <-done:
        return err
    case <-ctx.Done():
        return ctx.Err()
    }
}

数据竞争: 使用 go test -race 检测


测试规范

// 表驱动测试
func TestAdd(t *testing.T) {
    tests := []struct {
        name     string
        a, b     int
        expected int
    }{
        {"positive", 1, 2, 3},
        {"zero", 0, 0, 0},
    }

    for _, tt := range tests {
        t.Run(tt.name, func(t *testing.T) {
            got := Add(tt.a, tt.b)
            if got != tt.expected {
                t.Errorf("Add(%d, %d) = %d, want %d", tt.a, tt.b, got, tt.expected)
            }
        })
    }
}

性能优化

陷阱解决方案
循环中拼接字符串使用 strings.Builder
未预分配 slicemake([]T, 0, cap)
N+1 查询批量查询 + 预加载
无限制并发使用 semaphore 或 worker pool
Raw SQL 别名用了保留字避免 year_month/order/status/rank 等 MySQL 保留字做别名
# 性能分析
go test -cpuprofile=cpu.prof -bench=.
go tool pprof cpu.prof

项目结构

project/
├── cmd/                    # 可执行文件入口
├── internal/               # 私有代码
│   ├── handler/
│   ├── service/
│   ├── repository/
│   └── model/
├── pkg/                    # 公共代码
├── go.mod
└── go.sum

详细参考

文件内容
references/go-style.md命名约定、错误处理、并发、测试、性能
references/date-time.md日期加减、账期计算、AddDate 溢出处理

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

当设计或修改 REST API 响应结构、处理 API 返回值时触发。防止 API 设计缺陷导致的字段错位、类型歧义等问题。

The English summary is being prepared. Showing the original description.

doccker/cc-use-exp1.1KUpdated Aug 26, 2026

当设计或修改 REST API 响应结构、处理 API 返回值,或生成 Excel/CSV/PDF/对账文件等下游产物时触发。防止 API 设计缺陷导致的字段错位、类型歧义,以及生成产物时关键字段缺失但静默成功的问题。

The English summary is being prepared. Showing the original description.

doccker/cc-use-exp1.1KUpdated Aug 26, 2026

网关/代理/WAF/CDN 中间件的安全关键词匹配实现规范,防止纯子串匹配误判正常响应内容中的技术术语(如 Cloudflare、502、error)

The English summary is being prepared. Showing the original description.

doccker/cc-use-exp1.1KUpdated Aug 26, 2026

当 API/任务可能执行超过 10 秒(批量数据处理、远程 API 批量调用、全表扫描、跨租户聚合)时触发。防止同步接口被网关 30s 超时切断、用户重复点击触发并发、状态缓存内存泄漏等问题。提供异步任务状态机标准模板。

The English summary is being prepared. Showing the original description.

doccker/cc-use-exp1.1KUpdated Aug 26, 2026

当用户操作 .sh、Dockerfile、Makefile、.yml、.yaml 文件,或在 Markdown 中编写 bash 代码块时触发。提供 Bash 编写规范。

The English summary is being prepared. Showing the original description.

doccker/cc-use-exp1.1KUpdated Aug 26, 2026

Bash 脚本与系统命令规范。禁止行尾注释,强制使用 tee/heredoc 写入,提升命令执行的可维护性。

The English summary is being prepared. Showing the original description.

doccker/cc-use-exp1.1KUpdated Aug 26, 2026

See all skills by doccker

Report a problem with this skill