高质量编程简介及编码规范
如何编写更简洁清晰的代码
常用go语言程序优化手段
熟悉Go语言程序性能分析工具
了解工程中性能优化的原则和流程
高质量编程
什么是高质量?
编写代码正确可靠,简洁清晰
- 边界条件是否考虑完备
- 异常情况处理,稳定性保证
- 易读易维护
编程原则:
简单性
消除多余的复杂性,,以简单清晰的逻辑写代码
可读性
确保代码的可读性
生产力
团队整体工作效率非常重要
编码规范:
注释:
- 公共符号始终要注释
-
包中的声名每个公共的符号:
变量,常量,函数以及结构都需要添加注释
-
任何既不明显也不简短的公共功能必须赋予注释
-
无论长度或复杂度如何,对库中的任何函数都必须进行注释
例外:接口的实现类里面的方法不需要注释
注释应该做的:
- 注释应该解释代码的作用
比如说:语言库提供的各种方法,上面就有很多英文注释,里面就会写这些代码做了点什么,需要什么参数,返回什么值
-
注释应该解释代码如何做的
-
注释应该解释代码实现的原因
提供一些上下文
- 注释应该解释代码什么情况会出错
上面写的这几条不是每一段代码都要这么写,是根据他的实际需要来写的
命名规范
- 简介胜于冗长
- 缩写词全大写,但当其位于变量开头且不需要导出时,使用全小写
ServeHTTP
XMLHTTPResqueat
- 变量距离其被使用的地方越远,则需要携带越多的上下文信息
deadline就有特定的含义,但是t就是任意的
方法命名规范:
- 函数名不携带包名的上下文信息,因为包名和函数名总是成对出现的
- 函数名尽量简短
- 当名为foo的包某个函数返回类型Foo时,可以省略类型信息而不导致歧义
- 当名为foo的包1某个函数返回类型T时,可以在函数名中加入类型信息
包的命名规范:
- 只由小写字母组成,不包含大写字母和下划线字符
- 简短并包含上下文信息
- 不要和标准库同名
- 不使用常用变量名作为包名,例如:bufio而不是buf
- 是用单数而不是复数,
- 谨慎的使用缩写
控制流程
减少不必要的分支,如果两个分支都有return,那么就删除else
把容易发生报错还有边界问题,都提前考虑好,写在前面
错误和异常处理
-
简单的错误指的是仅出现一次的错误,且在其他地方不需要捕获该错误
-
优先使用error.New来创建匿名变量来直接表示简单错误
-
如果有格式化的需求,使用fmt.Errorf
上面这个代码的意思就是,将代码的错误和指定错误比较,返回信息
defer是后进先出的机制,因为有多个defer创建的情况