这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天
总结一下,今天的课让我对编码规范和性能调优有了一些深刻的认识,让我对实际开发中的一些要素比较全面了解
一.go编码规范
所有编码规范符合三个原则:
- 简单性
- 可读性
- 生产力
1.代码格式
使用gofmt自动格式化Go语言代码为官方统一风格
或者goimports
2.注释
- 解释代码作用
- 解释代码如何实现
- 解释代码实现的原因
- 解释代码什么情况下会出错
3.命名规范
I.变量
- 缩略词大写,位于变量开头且不需要导出使用全小写
- 全局变量需要给出更多上下文信息
II.方法
- 函数名不懈怠包名的上下文信息
- 尽量简短
- 当名为foo的包某个函数返回类型Foo时,可以省略
- 当名为foo的包某个函数返回类型T时,可以在函数名中加入类型信息
III.包
- 只由小写字母组成
- 简短且包含部分信息
- 不与标准库同名
4.控制流程
- 线性原则 : 避免嵌套(如if-else嵌套),一般来说去掉else
- 优先处理错误/特殊情况,尽早返回
5.错误异常处理
I.简单错误
是指仅出现一次的错误
优先使用errors.New来创建匿名变量来直接表示简单错误
注:其他错误目前尚未理解,实际欸开发过程中再去了解
二.性能优化
1.代码性能评估
go语言提供benchmark工具测试性能
2.Slice
一个优化建议
最好在定义切片时给予预分配内存
多次扩容会增加程序运行时间
同理Map也是
核心思想就是尽量不触发扩容
3.字符串处理
字符串拼接建议使用strings.Buffer
使用 + 每次重新分配内存
strings.Builder,bytes.Buffer底层都是数组
4.空结构体节省内存
m := make(map[int]struct{})
5.用atomic包代替锁
atmomic通过硬件实现,效率比锁高