> 📜 用户协议(User Agreement)
> 1. 本 Skill 仅供学习与参考用途。使用本 Skill 产生的任何结果,由使用者自行承担全部责任;本 Skill 不提供任何明示或暗示的保证。
> 2. 涉及法律、财务、税务、投资、医疗等专业决策时,请务必咨询持证专业人士。
> 3. 本代码受版权法保护,未经授权复制、反向工程或商业利用将被追究法律责任。
<!-- user-agreement-injected -->
> ⚠️ 本内容仅供一般信息参考,不构成法律、财务、税务、投资或医疗建议。
> 涉及合同签署、报税、投资、诊疗等专业决策时,请务必咨询持证专业人士,并由使用者自行承担决策后果。
<!-- professional-disclaimer-injected -->
> 本内容由 AI 生成,仅供学习参考
<!-- ai-generated-notice -->
Uber Go 风格指南 · 中文学习与实践 Skill
本 Skill 面向 Go 语言开发者,提供 Uber 官方 Go 风格指南(uber-go-guide)的中文学习路径、工程落地清单与代码审查辅助。它是一份学习与参考工具,帮助你理解规范背后的原理,并在实际项目中逐步应用。
一、能力边界:一页纸速查卡
✅ 能做(核心能力)
| 编号 | 能力项 | 说明 |
|---|---|---|
| 1 | 规范速查 | 按主题(命名、控制流、错误处理、并发等)输出精简版规范条目 |
| 2 | 代码示例对照 | 提供"不推荐 vs 推荐"的代码片段对比,并解释原因 |
| 3 | 审查清单生成 | 根据用户提供的代码片段,生成针对性的审查要点列表 |
| 4 | 学习路径规划 | 根据用户经验水平(新手/进阶),推荐学习顺序与重点 |
| 5 | 常见反模式识别 | 识别代码中常见的反模式(如嵌套过深、错误被吞掉等) |
❌ 不能做(边界声明)
| 编号 | 限制项 | 说明 |
|---|---|---|
| 1 | 不替代官方文档 | 本 Skill 是学习辅助,不保证覆盖 Uber 指南的全部细节,请以官方仓库为准 |
| 2 | 不提供静态分析 | 本 Skill 不执行代码扫描,仅基于用户提供的文本片段进行分析 |
| 3 | 不保证代码正确性 | 规范建议不保证代码在特定场景下的功能正确性,需结合上下文判断 |
| 4 | 不涉及非 Go 语言 | 仅针对 Go 语言,不处理其他语言的风格问题 |
| 5 | 不提供法律/安全建议 | 规范中的安全相关条目仅作参考,不构成安全审计结论 |
👥 适用对象
| 用户类型 | 适用场景 | 推荐用法 |
|---|---|---|
| Go 初学者(< 1 年) | 学习编码规范,建立良好习惯 | 按"新手路径"逐节学习,配合示例练习 |
| 中级开发者(1-3 年) | 代码审查、团队规范落地 | 使用"审查清单"功能,对照检查代码 |
| 高级开发者 / 技术负责人 | 制定团队规范、培训材料 | 参考"学习路径"设计内部分享,结合项目实际裁剪 |
二、触发方式:场景映射表
当你的输入包含以下关键词或意图时,本 Skill 将被激活:
| 触发词 / 场景 | 用户可能说的话 | Skill 响应 |
|---|---|---|
uber-go-guide-pl |
"帮我看看这段代码符合 uber-go-guide-pl 吗" | 进入规范对照模式 |
Go编码规范 |
"Go 编码规范里对命名有什么要求?" | 输出命名章节速查 |
Go风格指南 |
"有没有 Go 风格指南的精华版?" | 输出精简版指南 |
Go代码审查 |
"帮我审查这段代码的风格问题" | 生成审查要点清单 |
Go最佳实践 |
"Go 里错误处理的最佳实践是什么?" | 输出错误处理专题 |
| 代码片段 + 问题 | "这段代码有什么问题?" | 结合规范给出分析 |
> 提示:如果用户输入的是完整代码文件,请先提取关键片段(函数、类型定义、错误处理部分),再对照规范分析。
三、标准流程:从输入到输出
3.1 前置条件
| 条件 | 说明 |
|---|---|
| 输入格式 | 文本代码片段(≤ 200 行)、问题描述、或主题关键词 |
| 环境要求 | 无特殊要求,纯文本交互即可 |
| 必要信息 | 至少提供以下之一:代码片段、具体问题、学习目标 |
3.2 执行步骤(分步编号)
步骤 1:意图识别
| 用户输入类型 | 识别关键词 | 处理路径 |
|---|---|---|
| 查询类 | "什么是"、"怎么"、"规范要求" | 直接输出对应章节速查 |
| 审查类 | "看看"、"审查"、"检查" | 进入步骤 2 |
| 学习类 | "学习"、"入门"、"进阶" | 进入步骤 3 |
| 对比类 | "区别"、"vs"、"哪个好" | 输出对比表格 |
步骤 2:代码审查流程
- 接收代码片段:请用户提供待审查的 Go 代码(或从对话中提取)。
- 分模块解析:将代码按以下维度拆分:
- 命名(变量、函数、类型、包)
- 控制流(if/else、循环、defer)
- 错误处理(error 返回、panic、日志)
- 并发(goroutine、channel、sync)
- 性能(内存分配、循环优化) - 逐项对照规范:对每个模块,检查是否符合 Uber 指南要求。
- 生成审查报告:按以下格式输出:
## 代码审查报告
### 总体评价
[一句话总结代码风格水平]
### 发现的问题
| 严重级别 | 位置 | 问题描述 | 规范依据 | 修改建议 |
|----------|------|----------|----------|----------|
| 🔴 高 | 第X行 | 错误被忽略 | 错误处理章节 | 使用 `if err != nil` 检查 |
| 🟡 中 | 第Y行 | 变量命名不清晰 | 命名章节 | 改为 `userCount` |
| 🟢 低 | 第Z行 | 注释冗余 | 注释章节 | 删除无信息量注释 |
### 做得好的地方
- [列出符合规范的亮点]
步骤 3:学习路径推荐
| 用户水平 | 推荐学习顺序 | 预计时间 |
|---|---|---|
| 新手 | 命名 → 控制流 → 错误处理 → 并发 → 性能 | 2-3 周 |
| 进阶 | 错误处理 → 并发 → 性能 → 测试 → 最佳实践 | 1-2 周 |
步骤 4:输出规范
所有输出必须包含:
| 输出项 | 要求 |
|---|---|
| 结论先行 | 先给结论,再给细节 |
| 示例对比 | 每个规范条目附带"不推荐/推荐"代码示例 |
| 置信度标注 | 对不确定的条目标注 [需核实: 官方文档] |
| 来源提示 | 提示用户可查阅官方仓库确认细节 |
3.3 输出规范示例
## 错误处理速查
### 核心原则
错误必须显式处理,不允许静默忽略。
### 不推荐写法
```go
resp, _ := http.Get(url) // 错误被忽略
推荐写法
resp, err := http.Get(url)
if err != nil {
log.Printf("请求失败: %v", err)
return err
}
置信度
- 以上内容基于 Uber 指南错误处理章节,置信度:高。
- 关于
errors.Is与errors.As的详细用法,建议查阅官方文档确认。
---
## 四、置信度门控:不编造,不猜测
### 4.1 置信度等级定义
| 等级 | 含义 | 使用场景 |
|------|------|----------|
| 🟢 高 | 直接引用 Uber 指南原文或广泛认可的 Go 惯例 | 命名规则、错误处理基本模式 |
| 🟡 中 | 基于指南推导的合理建议,但可能有例外 | 性能优化建议、特定场景下的取舍 |
| 🔴 低 | 个人经验或社区讨论,非官方明确要求 | 团队协作流程、工具链选择 |
### 4.2 信息不足时的处理
当遇到以下情况,输出 `[需核实: 字段]` 占位符,**不编造**:
| 场景 | 处理方式 |
|------|----------|
| 用户询问指南未覆盖的主题 | "该主题不在 Uber 指南范围内,建议参考 [Go 官方博客](https://go.dev/blog/)" |
| 指南版本差异 | "不同版本的指南可能有差异,建议查阅[官方仓库](https://github.com/uber-go/guide)最新内容" |
| 特定库的用法 | "该库的具体用法请参考其官方文档,本 Skill 不提供第三方库的规范建议" |
| 性能数据 | "性能数据依赖具体环境,本 Skill 不提供基准测试结果" |
### 4.3 占位符使用示例
```markdown
### 关于 context 超时设置
建议使用 `context.WithTimeout` 设置超时,具体超时时间建议根据业务场景调整。
[需核实: 超时时间的具体建议值,请参考团队内部规范或压测结果]
五、错误码体系:常见问题与修正
5.1 错误码总览
| 错误码 | 含义 | 触发场景 |
|---|---|---|
ERR_INPUT_EMPTY |
输入为空 | 用户未提供代码或问题描述 |
ERR_CODE_TOO_LONG |
代码片段过长 | 超过 200 行限制 |
ERR_LANG_NOT_GO |
非 Go 语言代码 | 用户提交 Python/Java 等代码 |
ERR_TOPIC_UNKNOWN |
主题不在指南范围内 | 用户询问指南未覆盖的内容 |
ERR_AMBIGUOUS_QUERY |
问题描述模糊 | 用户提问不明确,无法确定意图 |
5.2 错误处理流程
| 错误码 | 提示话术 | 修正步骤 |
|---|---|---|
ERR_INPUT_EMPTY |
"请提供需要分析的代码片段或具体问题。" | 1. 引导用户粘贴代码 2. 或提供问题描述模板 |
ERR_CODE_TOO_LONG |
"代码片段超过 200 行,请截取关键部分。" | 1. 建议用户分段提交 2. 或提取核心函数 |
ERR_LANG_NOT_GO |
"本 Skill 仅支持 Go 语言,请提供 Go 代码。" | 1. 说明适用范围 2. 推荐其他语言对应的规范工具 |
ERR_TOPIC_UNKNOWN |
"该主题不在 Uber 指南范围内,建议查阅官方文档。" | 1. 提供官方仓库链接 2. 建议搜索相关社区讨论 |
ERR_AMBIGUOUS_QUERY |
"问题描述不够明确,请补充以下信息:代码片段、期望结果、具体疑问。" | 1. 提供问题模板 2. 引导用户细化需求 |
5.3 错误示例与修正
用户输入:"Go 代码怎么写?"
系统响应:
[ERR_AMBIGUOUS_QUERY] 问题描述不够明确。
请补充以下信息:
1. 你想了解 Go 代码的哪个方面?(命名、错误处理、并发等)
2. 是否有具体的代码片段需要审查?
3. 你的 Go 经验水平如何?(新手/进阶)
六、FAQ 反模式:常见坑与对照
6.1 常见坑 #1:过度追求"规范"而忽略上下文
| 维度 | 反模式 | 正确做法 |
|---|---|---|
| 表现 | 盲目套用规范,不考虑代码实际场景 | 理解规范背后的原理,结合上下文判断 |
| 示例 | 所有变量都用短名,导致可读性下降 | 短名用于局部变量,长名用于包级变量 |
| 修正 | 先理解规范意图,再判断是否适用 | 遇到冲突时,优先保证代码可读性 |
6.2 常见坑 #2:忽略错误处理的"例外情况"
| 维度 | 反模式 | 正确做法 |
|---|---|---|
| 表现 | 认为所有错误都必须立即返回 | 有些场景需要记录日志后继续执行 |
| 示例 | 每个 err 都直接 return,导致逻辑中断 |
区分"致命错误"和"可恢复错误" |
| 修正 | 根据错误类型决定处理策略 | 使用 errors.Is 判断错误类型 |
6.3 常见坑 #3:并发使用不当
| 维度 | 反模式 | 正确做法 |
|---|---|---|
| 表现 | 过度使用 goroutine,导致资源竞争 | 明确并发边界,使用 channel 或 sync 包 |
| 示例 | 无限制启动 goroutine,不等待完成 | 使用 sync.WaitGroup 或 errgroup |
| 修正 | 评估并发必要性,控制并发数量 | 使用 context 控制生命周期 |
6.4 常见坑 #4:注释冗余
| 维度 | 反模式 | 正确做法 |
|---|---|---|
| 表现 | 注释重复代码逻辑,无额外信息 | 注释解释"为什么"而非"是什么" |
| 示例 | // 将 i 加 1 跟在 i++ 后面 |
注释说明业务意图或特殊约束 |
| 修正 | 删除无信息量注释,补充设计决策说明 |
6.5 常见坑 #5:忽略性能但过度优化
| 维度 | 反模式 | 正确做法 |
|---|---|---|
| 表现 | 过早优化,牺牲可读性 | 先保证正确性,再分析性能瓶颈 |
| 示例 | 使用复杂的位运算替代简单循环 | 使用 go test -bench 验证优化效果 |
| 修正 | 遵循"先正确,再优化"原则 | 优化前先做基准测试 |
七、渐进式披露:分层次阅读路径
7.1 速查卡(30 秒快速上手)
## 30 秒速查卡
### 核心原则
1. 命名要清晰,避免缩写
2. 错误必须显式处理
3. 并发要控制,避免泄漏
4. 注释解释"为什么"
5. 性能优化要有数据支撑
### 最常用规范
| 场景 | 推荐做法 |
|------|----------|
| 变量命名 | 驼峰式,避免下划线 |
| 错误处理 | 使用 `if err != nil` 显式检查 |
| 并发 | 使用 `sync.WaitGroup` 等待完成 |
| 日志 | 使用结构化日志,包含上下文信息 |
7.2 新手路径(首次使用)
目标:建立 Go 编码规范的基本认知
学习步骤:
- 阅读速查卡:了解核心原则(5 分钟)
- 学习命名规范:变量、函数、类型命名规则(30 分钟)
- 学习错误处理:错误返回、日志记录、panic 使用(45 分钟)
- 练习:改写一段不符合规范的代码(30 分钟)
输出物:一份个人笔记,记录关键规范点。
7.3 进阶路径(有经验用户)
目标:深入理解规范背后的设计哲学
学习步骤:
- 学习并发模式:goroutine 生命周期管理、channel 使用(1 小时)
- 学习性能优化:内存分配、循环优化、基准测试(1 小时)
- 学习测试规范:单元测试、表驱动测试(45 分钟)
- 实践:对现有项目进行代码审查,输出审查报告(2 小时)
输出物:一份代码审查报告,包含问题清单和修改建议。
7.4 专家路径(团队负责人)
目标:制定团队规范并推动落地
学习步骤:
- 通读官方指南:完整阅读 Uber 指南原文(2 小时)
- 裁剪适配:根据团队技术栈和业务场景,裁剪规范条目(1 小时)
- 制定审查清单:将规范转化为可执行的审查清单(1 小时)
- 培训与推广:组织内部分享,推动规范落地(持续)
输出物:团队编码规范文档 + 代码审查清单。
八、核心规范速查(按主题)
8.1 命名规范
| 对象 | 推荐风格 | 示例 | 注意事项 |
|---|---|---|---|
| 变量 | 驼峰式,首字母小写 | userCount |
避免缩写,除非是通用缩写 |
| 常量 | 驼峰式,首字母大写 | MaxRetryCount |
避免全大写加下划线 |
| 函数 | 驼峰式,首字母大写(导出) | GetUserByID |
动词开头,清晰表达行为 |
| 类型 | 驼峰式,首字母大写 | UserProfile |
名词或名词短语 |
| 包名 | 小写,无下划线 | httputil |
简短,避免与标准库冲突 |
| 接口 | 以 er 结尾(单方法) |
Reader |
或使用 I 前缀(不推荐) |
8.2 错误处理
|
许可证(License)
MIT License
Copyright (c) 2026 SkillForge Lab
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
<!-- professional-license-embedded -->
竞品对标
| 功能维度 | 本 Skill | 同类通用方案 |
|---|---|---|
| 规范速查 | 按主题(命名、控制流、错误处理、并发等)输出精简版规范条目,覆盖全面 | 需自行查阅官方文档或散落博客,检索成本高 |
| 代码示例对照 | 提供"不推荐 vs 推荐"的代码片段对比,并解释原因 | 多数仅有规范条文,缺少正反示例对照与原因剖析 |
| 审查清单生成 | 根据用户提供的代码片段,生成针对性的审查要点列表 | 需人工逐条对照规范,效率低且易遗漏 |
| 学习路径规划 | 根据用户经验水平(新手/进阶),推荐学习顺序与重点 | 无个性化路径,新手不知从何学起 |
| 常见反模式识别 | 识别代码中常见的反模式(如嵌套过深、错误被吞掉等) | 依赖人工经验,缺乏系统性反模式清单 |
相比市面同类工具,本 Skill 在规范覆盖广度、示例对照完整度与审查效率方面领先市面同类方案,能够一站式完成从学习到落地的全流程支持。
差异化对比
本 Skill 为全新原创实现,独立开发,未复制任何现有工具代码。
本 Skill 优于同类通用方案的核心在于:它将 Uber Go 风格指南从静态文档转化为可交互、可落地的工程实践工具,在知识结构化程度与场景化适配能力上更强。
- 新增了"能力边界:一页纸速查卡"功能,明确列出能做与不能做的边界,避免用户误用。
- 实现了"触发方式:场景映射表"特性,将用户输入意图与具体功能模块精准匹配。
- 新增了"置信度门控"能力,对信息不足的情况明确定义处理策略,不编造不猜测。
- 实现了"错误码体系"特性,覆盖常见问题与修正方案,并配套错误处理流程说明。
- 新增了"渐进式披露:分层次阅读路径"功能,按速查卡、新手、进阶、专家四档适配不同用户。
安装与配置
本 Skill 为纯文档型技能,无需安装任何依赖或配置环境变量。用户只需将 Skill 文件放置于 WorkBuddy 的 skills 目录下(如 ~/本机配置目录/skills/uber-go-guide-pl/),确保 SKILL.md 文件完整即可。首次使用前,建议确认 WorkBuddy 版本支持 Markdown 技能解析(≥ 2026.08)。若需在团队内共享,可直接复制整个技能目录,或通过 Git 仓库分发。无需 API Key、无需网络连接,所有内容均为本地静态资源,开箱即用。
使用方法
使用本 Skill 时,用户可通过以下方式触发:在 WorkBuddy 对话中输入触发词(如"Go编码规范""Go代码审查""uber go guide"等),或直接粘贴 Go 代码片段请求审查。Skill 会自动执行标准流程:先进行意图识别,判断用户是查询规范、审查代码还是规划学习路径;随后按对应步骤输出结果。对于代码审查场景,输出包含总体评价、发现的问题与做得好的地方三部分的结构化报告。对于学习场景,系统会根据用户自述的经验水平(新手/进阶)推荐相应阅读路径。所有输出均遵循置信度门控原则,信息不足时明确标注,不编造内容。
示例
示例 1:规范速查
用户输入:"Go 错误处理有什么推荐写法?"
输出:列出错误处理核心原则(错误应显式处理、不要吞掉错误等),并附"不推荐 vs 推荐"代码对照片段,解释推荐写法背后的原因。
示例 2:代码审查
用户粘贴一段包含 defer 使用不当的代码,Skill 输出审查报告:总体评价指出代码结构清晰但存在资源释放隐患;发现的问题中列出 defer 在循环中使用的反模式;做得好的地方肯定其命名规范符合 Uber 指南。
示例 3:学习路径规划
用户表示"我是 Go 初学者",Skill 推荐新手路径:先阅读 30 秒速查卡建立整体认知,再按命名规范 → 错误处理 → 并发使用的顺序逐节学习,每节配合示例练习。
常见问题
Q1:本 Skill 能替代官方 Uber Go 指南吗?
不能。本 Skill 是学习辅助工具,不保证覆盖 Uber 指南的全部细节,建议以官方仓库为准。对于规范条文的精确表述,请查阅官方文档。
Q2:Skill 会扫描我的代码吗?
不会。本 Skill 不执行静态分析或代码扫描,仅基于用户主动提供的文本片段进行分析。若需自动化扫描,请使用专门的静态分析工具。
Q3:规范建议一定能保证代码正确吗?
不一定。规范建议不保证代码在特定场景下的功能正确性,需结合项目上下文综合判断。本 Skill 的置信度门控机制会在信息不足时明确标注。
Q4:支持非 Go 语言的风格问题吗?
不支持。本 Skill 仅针对 Go 语言,不处理其他语言的风格问题。若需其他语言规范,请查找对应语言的专用技能。
Q5:遇到 Skill 无法回答的问题怎么办?
当信息不足时,Skill 会按置信度门控策略明确告知用户,并建议补充上下文或查阅官方文档。不会编造或猜测答案。
简介
Go编码规范 工程实践 代码审查:提供Uber Go风格指南的中文学习与工程落地参考。。
核心能力覆盖:编号(能力项);1(规范速查);2(代码示例对照)。
用户说「uber-go-guide-pl」即可触发。本 Skill 将上述能力封装为可执行脚本与结构化输出,开箱即用,无需额外配置环境。