高质量编程
1.1 简介
什么是高质量代码
- 各种边界条件是否考虑完备
- 异常情况处理,稳定性保证
- 易读易维护
编码原则:
- 简单性
- 消除冗余
- 修复阅读性差的代码
- 可读性
- 确保代码的可读性
- 生产力
1.2 编码规范
1.2.1 代码格式
格式化工具 gofmt 依赖包管理工具 goimports
1.2.2 注释
- 包中声明的每个公共符号有需要注释。
- 不明显也不简短的功能需要注释
- 对库中的任何函数都必须进行注释
- 不需要注释实现接口的方法
1.2.3 命名规范
- 简介胜于冗长
- 缩略词全大写,当时其位于变量开头切不需要导出时使用全小写
- 变量距离其被使用的地方越远,则需要携带更多上下文信息。
1.2.4 控制流程
- 优先处理错误情况和特殊情况,尽早返回
1.2.5 错误和异常的处理
- 简单错误
- 简单的错误指的是仅出现一次的错误,且无需在其他地方捕捉
- 使用errors.New
- 格式化创建使用fmt.Errorf
- Wrap和Unwrap
- 包装错误和解错误
- 错误判定
- 错误判定使用errors.Is, 不要使用==, Is会比较被warp保证的error
- 判断特定的使用errors.As
- panic
- 在业务中尽量不要使用panic(启动项目中遇到特殊情况可以直接panic结束项目的启动)
- 没有recover进行panic恢复会使得整个程序奔溃
- 若问题可以被上层解决,使用error代替panic
- recover
- recover只能在defer中使用(其他地方无法使用)
- 嵌套使用无效
- 当且仅当只在当前gorouting下有效,在子gorouting无效
- defer使用的是栈结构,先进后出后进先出, 如果需要获取更多信息可以通过recover后在log中获取当前系统的调用栈