SuperAPI AI 工具集

go-uber-style-guide

编程与开发

查看项目

更新于 10-16 00:29

技能介绍

用途:在编写、重构或审查 Go 代码时,按 Uber Go Style Guide 提供严格、惯用的规范建议,优先保证正确性与安全性。完整风格指南见 references/style.md。

主要能力与核心要求:错误处理上,每个错误最多处理一次,不重复记录又返回;生产代码避免 panic,改用返回错误;os.Exit 或 log.Fatal* 仅在 main() 中调用且尽量一次;类型断言使用 comma ok 写法;用 fmt.Errorf 的 %w 包装错误、%v 隐藏细节,避免 “failed to” 前缀。并发方面,channel 应为无缓冲或大小为 1;goroutine 必须有可预测的结束时间或信号机制且调用方可等待;init() 不得启动 goroutine;原子操作用 go.uber.org/atomic。数据与全局状态方面,在边界处复制传入/传出的 slice 与 map;避免可变全局变量,改用依赖注入;不要遮蔽预声明标识符,go vet 应无告警。结构方面,包级别以上保持一致;尽量少用 init(),不得做 I/O 或依赖顺序;结构体初始化显式写出字段名(字段不超过 3 个的测试表除外);空 slice 返回 nil,用 len(s)==0 判空。专家建议包括:接口按值传递,不用接口指针;编译期用 var _ Interface = (Type)(nil) 校验;mutex 使用零值且不嵌入结构体;用 sync.WaitGroup 或多个 goroutine、chan struct{} 处理单个;时间操作统一用 time 包,time.Time 表示时刻、time.Duration 表示时段;热路径用 strconv 替代 fmt、固定字符串转 []byte 复用、make 指定容量;行宽软限制 99 字符,import 分标准库与其他两组,包名全小写无下划线且不使用 common/util/shared/lib,命名用 MixedCaps,按接收者分组排序,先处理错误与特殊情况,减少不必要的 else,未导出顶层变量用 _ 前缀(未导出错误用 err 前缀),嵌入字段置于结构体顶部且仅在确有收益时使用,用 := 表示显式值、var 表示零值,可为参数加 / paramName */ 注释,多行或含引号字符串用反引号。模式上推荐表驱动测试、函数式选项处理三个以上可选参数。工具与验证:Go 1.24+ 优先用 go tool <toolname>;用 golangci-lint 并以 assets/.golangci.yml 为基线;序列化结构体必须加字段标签;用 go.uber.org/goleak 检测 goroutine 泄漏;格式化字符串声明为常量便于 go vet 分析;自定义 Printf 风格函数以 f 结尾。

使用方式:将该技能用于 Go 代码的生成、审查与重构场景,按上述规则逐项检查。

限制:具体安装与调用方式、收费与平台信息资料未提供;本技能面向遵循 Uber 风格的 Go 项目,其他风格偏好可能不完全适用。