高质量编程
编码规范
代码格式
推荐使用gofmt自动格式化代码
注释
1、解释代码作用-适合注释公共符号
2、解释代码如何做的-适合注释实现过程
3、解释代码实现的原因-适合解释代码的外部因素
4、解释代码什么情况会出错-适合解释代码的限制条件
命名规范
变量
- 简洁胜于冗长
- 缩略词全大写,当其位于变量开头且无需导出时,全小写
- 变量距离被使用的地方越远,需携带更多上下文信息
函数
- 函数名不携带包名的上下文信息
- 函数名尽量简短
- 名为foo的包某个函数返回类型为Foo时,可省略类型信息
- 名为foo的包某个函数返回类型为T时,可在函数名中加入类型信息
package
- 只由小写字母组成
- 简短并包含一定上下文信息
- 不与标准库同名
以下尽量满足
- 不适用常用变量名作包名
- 使用单数
- 谨慎使用缩写
控制流程
- 避免嵌套
- 尽量保证正常代码路径为最小缩进
错误与异常处理
简单错误: 仅出现一次的错误,且在其他地方不需要捕获
优先使用errors.New创建匿名变量直接表示错误。如果有格式化需求,则使用fmt.Errorf
性能优化
Go语言提供的性能测试工具-benchmark
结果中各参数的说明
字符串处理
拼接字符串,+拼接性能最差,strings.Builder、bytes.Buffer相近,strings.Builder更快
性能调优
调优原则
- 依靠数据
- 定位最大瓶颈
- 不过早优化
- 不过度优化
性能分析工具pprof
各指标的含义
Flat==Cum,函数中没有调用其他函数
Flat==0,函数中只有其他函数的调用