这是我参与「第三届青训营 -后端场」笔记创作活动的第3篇笔记
本文是我在学习青训营课《高质量编程与性能调优实战》的过程中记的笔记
1.高质量编程
1.1简介
1.1.1什么是高质量
编写的代码能够达到正确可靠、简洁清晰的目标可称之为高质量代码
- 各种边界条件是否考虑完备
- 异常情况处理,稳定性保证
- 易读易维护
1.1.2编程原则
- 简单性
- 消除“多余的复杂性”,以简单清晰的逻辑编写代码
- 不理解的代码无法修复改进
- 可读性
- 代码是写给人看的
- 编写可维护代码的第一步是确保代码可读
- 生产力
- 团队整体工作效率非常重要
1.2编码规范
1.2.1代码规范
gofmt goimports
1.2.2 注释
注释应该做的
- 解释代码作用
- 解释代码如何做的
- 解释代码实现的原因
- 解释代码什么情况会出错
1.2.3 命名规范
variable
- 简略胜于冗长
- 缩略词全大写,但当其位于变量开头且不需要导出时,使用全小写
- 变量距离其被使用的地方越远,则需要携带越多的上下文信息
function
- 函数名不携带包名的上下文信息
- 函数名尽量简短
- 当名为foo的包某个函数返回类型Foo时,可以省略类型信息而不导致歧义
package
- 只由小写字母组成
- 简短并包含一定的上下文消息
- 不要与标准库同名
1.2.4 控制流程
- 避免嵌套,保持正常流程清晰
- 尽量保持正常代码路径为最小缩进
1.2.5 错误和异常处理
简单错误:仅出现一次且在其他地方不需要捕获的错误
- errors.New
- 格式化:fmt.Errorf
错误的Wrap和Unwrap
- 错误的Wrap提供了一个error嵌套另一个error的能力,从而生成一个error的跟踪链
- fmt.Errorf w%关键字将一个错误关联至错误链中
错误判定
- errors.Is
- errors.As,它和is的区别在于as会提取出调用链中指定类型的错误,并将错误赋值给定义好的变量,方便后续处理
panic
- 不建议使用panic
- 不包含recover会造成程序崩溃
recover
- 只能在被defer的函数中使用
- 只在当前goroutine生效