这是我参与「第三届青训营 -后端场」笔记创作活动的的第3篇笔记。
1、高质量编程
编写的代码能够达到正确可靠、简介清晰的目标称之为高质量代码。需要考虑各种边界条件是否考虑完备、异常情况处理,稳定性保证、易读易维护。分为简单性、可读性、生产力。
1、1 代码格式
可使用gofmt自动格式化代码。
1、2 注释
注释应该解释代码作用,什么情况会出错等等。并且公众符号始终要注释。接口实现的方法就不需要注释了。
1、3 命名规范
i和index优先使用i,特定含义的命名要符合其意思,函数名不携带上下文信息,例如time.Now()而不是time.NowTime()。命名不要与库重复。
1、4 控制流程
两个分支都包含return语句,应去掉冗余的。保证代码为最小缩进,提升代码的可读性和可维护性。
1、5 错误和异常处理
不建议使用panic,调用函数不包含recover函数会造成程序崩溃。defer采用栈结构存储的,后进先出策略。
1、6 性能优化建议
基准测试工具
go test -bench=. -benchmen
- 使用slice切片预分配内存,存数据时会优先从缓存取出,减小CPU压力。
- map预分配内存,提前分配好空间减少内存拷贝和rehash消耗。
- 字符串处理优先使用strings.Builder,直接使用+号性能最差。
- 使用空结构体节省内存
- 对于变量加锁可以使用atomic包,对一段逻辑加锁使用
sync.Mutex。
2 性能调优
性能分析工具pprof,可视化的性能分析工具。堆内存、CPU、goroutine协程、锁均可以查看使用情况。可以通过分析实际的程序熟悉相关功能,理解基本原理,后续能够更好地解决性能问题,其流程分为建立服务性能评估手段、分析性能数据,定位性能瓶颈、重点优化项改造、优化效果验证。
包括业务服务优化、基础库优化、Go语言优化。