其他
写 Go 代码时如何按优先级应用核心风格原则(清晰、简单…
在编写或审查 Go 代码、遇到格式化、嵌套、裸返回、分号等核心风格问题且没有更具体风格规则可依时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 48/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 53/100 ×0.15
适用场景
写 Go 代码时如何按优先级应用核心风格通用
解决思路
- 按优先级顺序应用风格原则:1) Clarity 清晰——读者能否无需额外上下文就理解代码;2) Simplicity 简单——是否是最简单的实现方式;3) Concision 简洁——每一行是否都有存在价值;4) Maintainability 可维护——以后是否容易修改;5) Consistency 一致——是否与周围代码和项目约定一致。
- 遇到原则冲突时阅读 `references/PRINCIPLES.md`;处理 gofmt、换行、空白、注释或分号时阅读 `references/FORMATTING.md`。
- 始终运行 `gofmt`,没有例外。没有严格的行长度限制,但 Uber 建议软限制为 99 个字符。按语义断行而非按长度断行——重构而不是简单换行。
- 减少嵌套:先处理错误情况和特殊条件,通过提前 return 或 continue 循环让“happy path”保持不缩进。
- 消除不必要的 else:如果变量在 if 的两个分支中都被赋值,改用默认值 + 覆盖模式(先 `a := 10`,再 `if b { a = 100 }`)。
- 裸返回(naked return):无参数的 `return` 会返回命名返回值。在只有几行的小函数中可以接受;函数增长到中等规模后应显式写出返回值以保证清晰;不要仅仅为了裸返回而命名返回值,文档清晰永远比省一两行更重要。
- 分号规则:Go 词法分析器会在行尾 token 为标识符、字面量或 `break continue fallthrough return ++ -- ) }` 时自动插入分号,因此开括号必须与控制结构在同一行(如 `if i < f() {`),不能换行到下一行。
- 惯用 Go 中显式分号只出现在 `for` 循环子句中,以及在同一行分隔多条语句时。
- 用快速参考自检:Clarity——读者能否理解做什么和为什么;Simplicity——是否最简单;Concision——信噪比是否高;Maintainability——以后能否安全修改;Consistency——是否与周围代码一致。
- 相关主题查阅其他技能:命名约定见 go-naming,错误流见 go-error-handling,文档见 go-documentation,lint 强制见 go-linting,代码审查见 go-code-review,日志风格见 go-logging。
适用边界 · 注意事项
- 不覆盖领域特定模式,如错误处理、命名或测试,这些应查阅专门技能。
- 当存在更具体的风格技能适用时,不应使用本技能作为回退。