这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天
高质量编程简介及编码规范
- 如何编写更简洁清晰的代码
- 常用Go语言程序优化手段
- 熟悉Go程序性能分析工具
- 了解工程中性能优化的原则和流程
01.高质量编程
- 高质量编程简介
- 编码规范性能优化建议
1.1 简介
- 各种边界条件是否考虑完备
- 异常情况处理
- 稳定性保证易读易维护
1.2 编码规范
- 代码格式
- 注释命名规范
- 控制流程
- 错误和异常处理
1.2.1 编码规范-代码格式
使用gofmt自动格式
1.2.2 编码规范-注释
注释适合公共符号
适当提供额外上下文
解释限制条件
注释应该做的
- 注释应该解释代码作用
- 注释应该解释代码如何做的
- 注释应该解释代码实现的原因
- 注释应该解释代码什么情况会出错
1.2.3 命名规范
简洁胜于冗长
缩略词全大写,但当其位于变量开头且不需要导出时,使用全小写
- 例如使用ServeHTTP而不是ServeHttp 使用XMLHTTPRequest或者xmlHTTPRequest
变量距离其被使用的地方越远,则需要携带越多的上下文信息
- 全局变量在其名字中需要更多的上下文信息,使得在不同地方可以轻易辨认出其含义
函数命名
- 函数名不携带包名的上下文信息,因为包名和函数名总是成对出现的
- 函数名尽量简短
- 当名为foo的包某个函数返回类型Foo时,可以省略类型信息而不导致歧义
- 当名为foo的包某个函数返回类型T时(T并不是Foo),可以在函数名中加入类型信息
包命名
- 只由小写字母组成。不包含大写字母和下划线等字符
- 简短并包含一定的上下文信息。例如schema、task等
- 不要与标准库同名。例如不要使用sync或者strings
以下规则尽量满足,以标准库包名为例
- 不使用常用变量名作为包名。例如使用bufio而不是buf
- 使用单数而不是复数。例如使用encoding而不是encodings
- 谨慎地使用缩写。例如使用 fmt 在不破坏上下文的情况下比 format 更加简短
1.2.4 控制流程
减少if嵌套
if 控制在两个及以内
线性原理,逻辑走直线
1.2.5 错误和异常处理
- 简单的错误指的是仅出现一次的错误,且在其他地方不需要捕获该错误
- 优先使用 errors.New 来创建匿名变量来直接表示简单错误
- 如果有格式化的需求,使用fmt.Errorf
02性能调优实战
- 性能调优简介
- 性能分析工具pprof实战
- 性能调优案例