这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天
重点内容
高质量编程
编码规范
代码格式
使用gofmt自动格式化代码,保证所有的Go代码与官方推荐格式保持一致
注释
- 注释应该解释代码作用
- 对代码中复杂的,并不明显的逻辑进行说明,适合注释实现过程
- 注释应该解释代码实现的原因
- 注释应该解释代码什么时候会出错
- 对公共符号进行注释
命名规范
变量命名
- 简洁胜于冗长
- 缩略词全大写,但当其在变量开头且不需要导出时,使用全小写
- 变量距离其使用距离越远,需要携带更多的信息
函数命名
- 函数名不携带包名的上下文信息,因为包名和函数名总是成对出现的
- 函数名尽量简短
- 当名为foo的包某个函数返回类型Foo时,可以省略类型信息而不导致歧义
- 当名为 foo 的包某个函数返回类型T时(T并不是Foo),可以在函数名中加入类型信息
控制流程
- 避免嵌套,保持流程清晰
- 尽量保持正常代码路径为最小缩进
错误和异常处理
优先使用 errors.New 来创建匿名变量来直接表示简单错误
如果有格式化的需求,使用 fmt.Errorf
对于复杂的错误
错误的包装提供了一个error嵌套另一个error的能力,生成一个error的跟踪链,同时结合错误的判定方法来确认调用链中是否有关注的错误出现。这个能力的好处是每一层调用方可以补充自己对应的上下文,方便跟踪排查问题,确定问题的根本原因在哪里
不建议在业务代码中使用panic
特殊地,当程序启动阶段发生不可逆转的错误时,可以在init或main函数中使用panic
性能优化
- 性能优化的前提是满足正确可靠、简洁清晰等质量因素
- 性能优化是综合评估,有时候时间效率和空间效率可能对立
- 针对Go语言特性,介绍Go相关的性能优化建议