这是我参与「第五届青训营」伴学笔记创作活动的第3天。
作为一个工程,高质量的代码可以提高工作效率,减少不必要的麻烦。
1 高质量编程
高质量代码的特征:正确可靠、简洁清晰。具体包括边界条件的考虑,异常情况的处理,以及易读易维护。
编码规范包括:格式规范、注释、命名规范、控制流程、错误和异常处理。
- 代码规范推荐使用gofmt自动格式化代码。goimports在gofmt之外还包括对依赖包的管理。
- 代码注释主要包括4部分:代码的功能、如何实现、实现原因(使用场景)、什么情况报错(限制条件)。
- 命名时要注意名称所携带的信息是否不缺失不冗余。通常情况下,包名只包含小写字母,尽量不用复数,使用常见缩写。
- 对于控制流程而言,避免嵌套,保证正常代码清晰;尽量保证正确代码缩进为最小路径(优先处理错误/特殊情况)。
- 异常处理分为简单错误和错误的跟踪链。简单错误通常使用errors.New来创建单一错误或使用fmt.Errorf来格式化返回错误。错误的跟踪链主要涉及到Wrap和Unwrap,常用errors.Is和error.As方法。如果涉及defer还要注意defer之间的后进先出顺序。慎重使用panic,一定要对应相应的recover,尤其是保存log。
2 性能调优
性能优化可能会存在时间效率和空间效率不能同时获得的情况。
- 使用benchmark查看现有消耗。
- slice优化:预分配内存,减少重新分配。slice底层结构为内存指针+长度+容量。
- map性能优化:同slice。
- 字符串处理:string.Builder、bytes.Buffer。
- 使用空结构体占用空间。
- atomic包。
性能优化的前提是保证代码的稳定性。
3 总结
高质量编程和性能优化看起来是很相似的作用,但实际上存在很明显的差别。高质量编程更偏向于提高“人”的工作效率,降低人编写、阅读代码时的成本。这一点是可以较为轻松的在不同编程语言之间进行转化的。而性能调优更偏向于提高“计算机”的工作效率,减少不必要的操作。对于每一种编程语言的优化方法可能不太一样,因为涉及到的底层逻辑、底层操作可能存在差异。因此,规范编程风格和提高语言理解,都是改进自己代码质量的必要基础。