Day3高质量编程与编码规范| 青训营

79 阅读3分钟

今日课程

(入门小白学习Go的第三天,感觉强度好高,力不从心) 今天的内容主要是了解高质量编程的定义以及原则,学习代码格式、注释、命名规范、控制流程、错误和异常处理五方面的常见编码规范。 在本次课程中,可以学习到:

  • 如何编写更简洁清晰的代码
  • Go语言程序中常用的优化手段
  • 熟悉Go程序性能分析工具
  • 了解工程中性能优化的原则和流程

高质量代码

即正确可靠、简洁清晰的代码。可从如下几点大概判断:

  • 是否易读易维护
  • 稳定性保证、异常情况处理
  • 各种边界条件是否考虑完备

编程原则

简单性

  • 编写的代码应该逻辑清晰简单,利于后续的修改和维护

可读性

  • 代码便于维护的前提是代码具有良好的可读性,毕竟代码是写给人看的而不是写给机器看的

生产力

  • 团队整体的工作效率非常重要

编码规范

代码格式

  • gofmt工具:利用官方提供的工具gofmt自动格式化Go语言代码为官方统一风格
  • goimports工具: 也是官方工具,gofmt+依赖包管理

注释

代码是最好的注释,而注释应当提供代码未表达出的上下文信息

  • 包中声明的公共符号:变量、常量、函数和结构都需要添加注释
  • 任何既不明显也不简短的公共功能必须添加注释
  • 对库中任何函数必须添加注释

命名规范

重点在于降低阅读和理解代码的成本

variable
  • 简洁
  • 缩略词全大写,但当位于开头且不需要导出时,全小写
  • 变量距其使用的地方越远,则应携带越多上下文信息
function
  • 函数名不携带包名上下文信息
  • 函数名尽量简短
package
  • 只用小写字母组成
  • 简短并包含一定上下文信息
  • 不与标准库同名

控制流程

逻辑尽量直接了当,减少嵌套分支,提升代码的可读性和可维护性

  • 避免嵌套,保持正常流程清晰
  • 尽量保持正常代码路径为最小缩进(即优先处理错误或特殊情况,尽早返回或继续循环来减小嵌套)

错误和异常处理

  • error尽可能提供简明的上下文信息链,便于定位错误
  • panic用于真正异常的情况
  • recover应当注意适用范围
简单错误(仅出现一次的错误,且在其他地方不需要捕获该错误)
  • 优先使用errors.New创建创建匿名变量来直接表示简单错误
  • 如果有格式化需求,使用fmt.Errorf
错误的Wrap和Unwrap

Wrap实际上是提供一个error嵌套另一个error的能力,从而生成一个error跟踪链

错误判定
  • 使用errors.ls来判断一个错误是否是特定错误
  • 不同于==, 该方法可以判断错误链中是否含有特定错误
panic
  • 不建议在业务代码中使用panic
  • 调用函数不包含recover会导致程序崩溃
  • 若问题可以被屏蔽或解决,建议使用error

当程序启动阶段发生不可逆转的错误时,可以在init或main函数中使用panic

recover
  • 只能在被defer的函数中使用
  • 嵌套无法生效
  • 只能在当前goroutine生效
  • defer的语句是后进先出