这是我参与「第五届青训营 」笔记创作活动的第2天
高质量编程
高质量编程简介
完成功能是基本要求,什么是高质量?
编写的代码能够达到正确可靠、简洁清晰的目标可称之为高质量代码。具体包括各种边界条件是否考虑完善,稳定性保证、异常情况处理以及易读易维护等。
编程原则
各种语言、各种场景,高质量编程原则是相通的
- 简单性
关于简单性,我的理解是避免重复代码,代码逻辑清晰简单,过于复杂的代码逻辑对于后期维护难度很大,错误也难以定位 - 可读性
代码可读性高时,易于后期功能迭代,节省开发成本 - 生产力
体现在团队整体生产效率
编码规范
如何编写高质量代码
- 注意代码格式
- 养成使用注释的习惯
包中的每个共公符号(包括函数、变量、结构等)都要进行注释。注释要能够解释代码作用,解释代码是如何做的,解释实现代码的原因,提供上下文,解释什么情况下代码会出错(表达代码体现不出的内容) - 规范命名
简洁清晰命名
示例1:
对于该情况,循环中变量i(index)仅在循环域中,命名为index的额外冗长并不能带来其他对程序的理解。
示例2:
该示例中,deadline携带了特殊含义“截止时间”,有助于程序理解 - 流程控制
避免嵌套if/else、尽量保证正常代码路径为最小缩进,优先处理特殊或异常情况,尽早返回减少嵌套
示例:
- 错误和异常处理
针对Go性能优化建议
- slice、map内存预分配
尽量在make()初始化切片时提供容量信息,减少内存拷贝、扩容等消耗 - copy()代替re-slice
切片会复用底层数组,导致原始数组内存被引用不能释放 - 字符串处理
使用strings.Builder,“+”拼接字符串性能差。这是因为在GO中字符串是不可变类型,使用+每次都会重新分配内存。strings.Builder底层是[]byte数组,有扩容策略,不需要重新分配内存。 - 空结构体
节省内存,作为占位符,可以用map实现set - atomic包
小结
- 避免常见的性能陷阱可以保证程序大部分性能
- 不需要过分追求性能
- 高级方法实现性能优化容易出现问题
- 在满足正确可靠、逻辑清晰的质量要求下提高程序性能
此外,在本次学习中,很多知识需要在实践中去认识,在今后开发中需要多注意。