这是我参与「第五届青训营 」伴学笔记创作活动的第 12 天
一、本堂课重点内容:
- 高质量编程
二、详细知识点介绍:
- 高质量编程
1.1 简介
编写的代码能够达到正确可靠、简洁清晰的目标可称之为高质量代码。
- 各种边界条件是否考虑完备
- 异常情况处理,稳定性保证
- 易读易维护
实际的应用场景千变万化,各种语言的特性和语法各不相同,但是高质量编程遵循的原则是相通的。
Go语言开发者 Dave Cheney眼中的高质量代码:
- 简单性
消除“多余的复杂性”,以简单清晰的逻辑编写代码。
不理解的代码无法修复改进。 - 可读性
代码是写给人看的,而不是机器。
编写可维护代码的第一步是确保代码可读。 - 生产力
团队整体工作效率非常重要。
1.2 编码规范
- 代码格式
- 注释
- 命名规范
- 控制流程
- 错误和异常处理
1.2.1 编码规范——代码格式
推荐使用gofmt自动格式化代码
- gofmt
Go语言官方提供的工具,能自动格式化Go语言代码为官方统一风格,常见IDE都支持方便的配置。
- goimports
也是Go语言官方提供的工具,实际等于gofmt加上依赖包管理,自动增删依赖的包引用、将依赖包按字母序排序并分类。
1.2.2 编码规范——注释
注释应该做的:
- 注释应该解释代码作用
- 注释应该解释代码如何做的
- 注释应该解释代码实现的原因
- 注释应该解释代码什么情况会出错
好的代码有很多注释,坏代码需要很多注释。 ——Dave Thomas and Andrew Hunt
注释应该解释代码作用
- 适合注释公共符号
注释公共的常量、变量及对外提供的函数。只有函数比较简单时才不需要注释。
例子:
反例:
通过函数名我们已经很清晰地知道了上面注释的信息。
注释应该解释代码如何做的
- 适合注释实现过程
对代码中相对来说比较复杂的逻辑进行说明。
例子:
反例:
注释中只包含了代码中的信息而没有额外信息。
注释应该解释代码实现的原因
- 适合解释代码的外部因素
- 需要提供额外的上下文
需要解释代码实现原因的外部因素,这些因素脱离上下文后很难进行理解。
例子:
注释应该解释代码什么情况会出错
- 适合解释代码的限制条件
例子:
公共符号始终要注释①
- 包中声明的每个公共的符号:变量、常量、函数以及结构都需要添加注释
- 任何既不明显也不简短的公共功能必须予以注释
- 无论长度或复杂程度如何,对库中的任何函数都必须进行注释
例子:
- 有一个例外,不需要注释实现接口的方法。
反例:
公共符号始终要注释②
- 对于公共符号都要有注释说明
- 尽管LimiterReader.Read本身没有注释,但它紧跟LimitedReader结构的声明,明确了它的作用。
例子:
小结
- 代码是最好的注释
- 注释应该提供代码未表达出的上下文信息
三、引用参考: