高质量编程|青训营笔记

56 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天。

一、高质量代码

定义:编写的代码能够达到正确可靠、简洁清晰的目标可称之为高质量代码。

特点:

正确性:是否考虑各种边界条件,错误的调用是否能够处理。

可靠性:异常情况或者错误的处理策略是否明确,依赖的服务出现异常是否能够处理。

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

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

二、编程原则

简单性

消除“多余的复杂性”,以简单清晰的逻辑编写代码; 不理解的代码无法修复改进。

可读性

代码是写给人看的,而不是机器; 编写可维护代码的第一步是确保代码可读。

生产力

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

三、编码规范

代码格式

  • 使用gofmt自动格式化代码。
  • goimports自动增删依赖的包引用、将依赖包按字母序排序并分类。

注释

  • 解释代码作用。
  • 解释代码如何做的。
  • 解释代码实现的原因。
  • 解释代码什么情况会出错。

小结:代码是最好的注释,注释应该提供代码未表达出的上下文信息;简洁清晰的代码对流程注释没有要求,但是对于为什么这么做,代码的相关背景,可以通过注释补充,提供有效信息。

命名规范

变量名(var)——简洁胜于冗长;缩略词全大写,但当其位于变量开头且不需要导出时,使用全小写;变量距离其被使用的地方越远,则需要携带越多的上下文信息;全局变量在其名字中需要更多的上下文信息,使得在不同地方可以轻易辨认出其含义。

函数(func)——函数名不携带包名的上下文信息,因为包名和函数名总是成对出现的;函数名尽量简短; 当名为foo的包某个函数返回类型Foo时,可以简略类型信息而不导致歧义;当名为foo的包某个函数返回类型T时(T并不是Foo),可以在函数名中加入类型信息。

包(package)——不使用常用变量名作为包名;使用单数而不是复数;谨慎地使用缩写。

四、控制流程

  • 线性原理,处理逻辑尽量走直线,避免复杂的嵌套分支
  • 正常流程代码沿着屏幕向下移动
  • 提升代码可维护性和可读性
  • 故障问题大多出现在复杂的条件语句和循环语句中

五、错误和异常处理

  • error:尽可能提供简明的上下文信息链,方便定位问题。
  • panic:用于真正异常的情况。
  • recover:生效范围,在当前goroutine的被defer的函数中生效。

个人收获:通过对本次课程的学习,加深了我对GO语言基础的理解,也学会了如何编写高质量代码,提高代码的可读性、执行率等等。