这是我参与「第五届青训营」笔记创作活动的第3天
一. 重点内容
-
Go语言编码规范
-
Go语言性能优化建议
-
Go性能分析
二. 知识点介绍
1. Go语言编码规范
- 保持高质量编程的三要素:简单性、可读性、生产力
- 简单性:代码逻辑简单清晰,不存在无法理解的代码
- 可读性:代码良好的可读性才能保证代码易于维护
- 生产力:提高团队整体生产效率
- 注释:公共符号、变量、功能模块以及函数都需要添加注释
- 代码格式:推荐使用gofmt自动格式化代码
- 命名规范:简洁易懂,注意区分大写和小写
- 控制流程:避免嵌套,去除冗余的代码,保持代码为最小缩进;优先处理错误/特殊情况,尽早return或者继续循环减少嵌套
- 错误和异常处理:优先使用errors.New()创建匿名变量表示简单错误;若有格式化输出错误的需求,使用fmt.Errorf()来处理;在业务代码中,不推荐使用panic(),尽量使用error代替panic;注意recover()的生效范围,只在当前goroutine的被defer的函数中生效;有多个defer的函数,注意执行顺序,后进先出
2. Go语言性能优化建议
- 性能表现:需要数据衡量,Go语言提供了支持性能基准测试的benchmark工具
- Slice预分配内存:尽量在make()初始化切片时提供容量信息
- 字符串处理:如使用strings.Builder()处理字符串拼接[内存扩容策略],strings.Builder()和bytes.Builder()底层都是[]bytes数组,不需要重新分配内存,而使用"+"每次都会重新分配内存
- 空结构体:节省内存,可作为占位符使用
- atomic包:安全的增加多线程任务中的计数器,通过硬件实现,效率比锁要高
3. Go语言性能分析[ppof]
四. 个人课后总结
我们在写Go语言代码时遵守代码规范,保证代码质量,在满足代码正确可靠、逻辑简洁清晰的前提下提高程序性能,不要一味的追求程序性能,反而会因小失大。