这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天。
一、高质量代码
定义:编写的代码能够达到正确可靠、简洁清晰的目标可称之为高质量代码。
特点:
正确性:是否考虑各种边界条件,错误的调用是否能够处理。
可靠性:异常情况或者错误的处理策略是否明确,依赖的服务出现异常是否能够处理。
简洁:逻辑是否简单,后续调整功能或新增功能是否能够快速支持。
清晰:其他人在阅读理解代码的时候是否能清楚明白,重构或者修改功能是否不会担心出现无法预料的问题。
二、编程原则
简单性
消除“多余的复杂性”,以简单清晰的逻辑编写代码; 不理解的代码无法修复改进。
可读性
代码是写给人看的,而不是机器; 编写可维护代码的第一步是确保代码可读。
生产力
团队整体工作效率非常重要。
三、编码规范
代码格式
- 使用gofmt自动格式化代码。
- goimports自动增删依赖的包引用、将依赖包按字母序排序并分类。
注释
- 解释代码作用。
- 解释代码如何做的。
- 解释代码实现的原因。
- 解释代码什么情况会出错。
小结:代码是最好的注释,注释应该提供代码未表达出的上下文信息;简洁清晰的代码对流程注释没有要求,但是对于为什么这么做,代码的相关背景,可以通过注释补充,提供有效信息。
命名规范
变量名(var)——简洁胜于冗长;缩略词全大写,但当其位于变量开头且不需要导出时,使用全小写;变量距离其被使用的地方越远,则需要携带越多的上下文信息;全局变量在其名字中需要更多的上下文信息,使得在不同地方可以轻易辨认出其含义。
函数(func)——函数名不携带包名的上下文信息,因为包名和函数名总是成对出现的;函数名尽量简短; 当名为foo的包某个函数返回类型Foo时,可以简略类型信息而不导致歧义;当名为foo的包某个函数返回类型T时(T并不是Foo),可以在函数名中加入类型信息。
包(package)——不使用常用变量名作为包名;使用单数而不是复数;谨慎地使用缩写。
四、控制流程
- 线性原理,处理逻辑尽量走直线,避免复杂的嵌套分支
- 正常流程代码沿着屏幕向下移动
- 提升代码可维护性和可读性
- 故障问题大多出现在复杂的条件语句和循环语句中
五、错误和异常处理
- error:尽可能提供简明的上下文信息链,方便定位问题。
- panic:用于真正异常的情况。
- recover:生效范围,在当前goroutine的被defer的函数中生效。
个人收获:通过对本次课程的学习,加深了我对GO语言基础的理解,也学会了如何编写高质量代码,提高代码的可读性、执行率等等。