这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天
在今天的视频课中学习了有关编码规范与性能优化的相关内容
编码规范
编码规范这方面需要通过工具约束或者在遇到困惑时及时查阅规范才能养成良好的编码习惯。错误处理方面的更需要依据自己或他人的实践经验才能掌握。
可以使用goftm等工具对代码进行自动格式化,统一代码风格
命名规范
- 避免无意义长命名
- 大写缩略词
- package命名只使用小写字母且不与标准库同名
错误处理
panic
panic可能直接导致后面程序的中断,不建议在生产环境使用panic。
panic更适用于暴露程序中不可逆装的错误。
recover
- 只能在defer函数中使用
- 只在当前goroutine生效
- defer语句时先进后处
Go性能优化建议
提高基础的算法能力,避免使用低效率暴力手段实现一些逻辑就可以很大程度上避免程序的性能下降了。
在Go的性能优化中可以使用Go提供的benchmark工具测试基准性能。
以下是在编程中需要注意的可以提高程序性能的手段
预分配内存
预估slice与map的容量大小,减少扩容次数,减少损耗
合理使用slice
避免引用大数组,影响大数组释放内存
字符串处理
字符串为定长,每次使用+拼接会重新分配内存,考虑使用strings.Builder与bytes.Buffer替代
空结构体
空结构体不占用存储空间。应用场景如Go中没有set使用map加上空结构体作为set节省空间
参考:Go 语言空结构体详解 - 墨天轮 (modb.pro)
使用atomic实现原子操作
原理
直接使用了底层CPU实现原子操作,比系统中实现加锁解锁效率更高
支持的数据类型
- int32
- uint32
- int64
- uint64
- uintptr
- unsafe.Pointer
参考