高质量编程与性能调优实战 | 青训营笔记

171 阅读4分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第3篇笔记

一、高质量编程

什么是高质量的编程呢?

这个问题比较偏主观,不过可以认为是编写的代码能够达到正确可靠简单清晰的目标可称之为高质量代码

  • 简洁:逻辑是否简单,后续调整功能或新增功能是否能够快速支持

  • 清晰:其他人在阅读理解代码的时候是否能清楚明白,重构或者修改功能是否不会担心出现无法预料的问题

  • 正确性: 各种边界值条件是否考虑完备

  • 可靠性: 异常情况处理,稳定性保证

  • 易读易维护

编码规范(如何编写出高质量的GO代码):

  1. 代码格式
  • gomft (推荐使用) :

GO语言官方提供的工具,能自动格式化GO语言代码为官方统一风格,常见IDE都支持方便的配置

  • goimports : 也是GO语言官方提供的工具,实际等于gofmt加上依赖包管理,自动增删依赖的包引用、将依赖包按字母顺序排序并分类
  1. 注释
  • 注释应该解释代码作用 首先是注释应该解释代码作用,这种注释适合说明公共符号,比如对外提供的函数注释描述它的功能和用途.只有在函数的功能简单而明显时才能省略这些注释(例如,简单的取值和设值函数 另外注释要避免啰嗦,不要对显而易见的内容进行说明.下面的代码中注释就没有必要加上,通过名称可以很容易的知道作用 备注:后续的内容有不少代码,大部分是从g0的仓库中摘录出来的,下方就是代码链接,感兴趣的可以看看相关的文件

image.png

  • 注释应该解释代码如何做的 第二种注释是对代码中复杂的,并不明显的逻辑进行说明,适合注释实现过程 上面这段代码是给新url加上最近的referer信息,并不是特别明显,所以注释说明了一下 下面的是一个反例,虽然是对过程注释,但是描述的是显而易见的流程,注意不要用自然语言直接翻译代码作为注释,信息冗余还好,有时候表述不一定和代码一致

image.png

  • 注释应该解释代码实现的原因 第三条,注释可以解释代码的外部因素,这些因素脱离上下文后通常很难理解 示例中有一行shouldRedirect:=false的语句,如果没有注释,无法清楚地明白为什么会设置false 所以注释里提到了这么做的原因,给出了上下文说明

image.png

  • 注释应该解释代码什么情况会出错 第四,注释应该提醒使用者一些潜在的限制条件或者会无法处理的情况 例如函数的注释中可以说明是否存在性能隐患,输入的限制条件,可能存在哪些错误情况,让使用者无需了解实现细节 示例介绍了解析时区字符串的流程,同时对可能遇到的不规范字符串处理进行了说明

image.png

  • 公共符号始终要注释

下面的示例是一个公共函数的注释说明,结合之前提到的规范,注释表述了函数的功能和如何工作的 image.png 当然也有例外,就是 图里的注释没有提供有用的信息。它没有告诉你这个方法做了什么,更糟糕是它告诉你去看其他地方的文档 在这种情况下,建议完全删除该注释

image.png 最后选取一个g0仓库中相对完整的代码块来说明注释 首先LimitReaderf的功能有注释说明 然后是LimitedReader结构体的说明,就在使用它的函数之前 LimitedReader.Read的声明遵循LimitedReader本身的声明,里面已经有详细说明,所以没有注释

image.png 总结一下,注释部分我们重要的要记住两点 代码是最好的注释 注释应该提供代码未表达出的上下文信息 简洁清晰的代码对流程注释没有要求,但是对于为什么这么做,代码的相关背景,可以通过注释补充,提供有效信息