高质量编程

129 阅读2分钟

高质量编程

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中获取当前系统的调用栈