高质量编程
何为高质量:
正确性:是否考虑各种边界条件,错误的调用是否能够处理
可靠性:异常情况或者错误的处理策略是否明确,依赖的服务出现异常是否能够处理
简洁:逻辑是否简单,后续调整功能或新增功能是否能够快速支持
清晰:其他人在阅读理解代码的时候是否能清楚明白,重构或者修改功能是否不会担心出现无法预料的问题
编码规范
如何编写高质量的Go代码 代码格式 注释 命名规范 控制流程 错误和异常处理
代码格式
- 使用 gofmt 自动格式化代码,保证所有的 Go 代码与官方推荐格式保持一致
- goimports也是Go语言官方提供的工具实际等于gofmt加上依赖包管理,自动增删依赖的包引用、将依赖包按字母序排序并分类
注释
- 适当注释公共符号
- 适当注释实现过程
- 适当解释代码的外部因素
- 提供额外的上下文
- 解释代码的限制条件
公共符号的注释
包中声明的每个公共的符号:变量、常量、函数以及结构都需要添加注释 任何既不明显也不简短的公共功能必须予以注释 无论长度或复杂程度如何,对库中的任何函数都必须进行注释
命名规范
变量
简洁胜于冗长 缩略词全大写,但当其位于变量开头且不需要导出时,使用全小写 例如使用ServeHTTP而不是ServeHttp 使用XMLHTTPRequest 或者xmlHTTPRequest 变量距离其被使用的地方越远,则需要携带越多的上下文信息 全局变量在其名字中需要更多的上下文信息,使得在不同地方可以轻易辨认出其含义
函数
函数名不携带包名的上下文信息,因为包名和函数名总是成对出现的函数名尽量简短 当名为foo的包某个函数返回类型Foo时,可以省略类型信息而不导致歧义 当名为foo 的包某个函数返回类型T时(T并不是Foo),可以在函数名中加入类型信息
包
只由小写字母组成。不包含大写字母和下划线等字符。简短并包含一定的上下文信息。例如schema、task 等·不要与标准库同名。例如不要使用sync或者 strings