高质量编程| 青训营笔记

68 阅读2分钟

这是我参与「第五届青训营 」笔记创作活动的第2天

高质量编程

高质量编程简介

完成功能是基本要求,什么是高质量?

编写的代码能够达到正确可靠、简洁清晰的目标可称之为高质量代码。具体包括各种边界条件是否考虑完善,稳定性保证、异常情况处理以及易读易维护等。

编程原则

各种语言、各种场景,高质量编程原则是相通的

  • 简单性
    关于简单性,我的理解是避免重复代码,代码逻辑清晰简单,过于复杂的代码逻辑对于后期维护难度很大,错误也难以定位
  • 可读性
    代码可读性高时,易于后期功能迭代,节省开发成本
  • 生产力
    体现在团队整体生产效率

编码规范

如何编写高质量代码

  • 注意代码格式
  • 养成使用注释的习惯
    包中的每个共公符号(包括函数、变量、结构等)都要进行注释。注释要能够解释代码作用,解释代码是如何做的,解释实现代码的原因,提供上下文,解释什么情况下代码会出错(表达代码体现不出的内容)
  • 规范命名
    简洁清晰命名
    示例1:
    image.png
    对于该情况,循环中变量i(index)仅在循环域中,命名为index的额外冗长并不能带来其他对程序的理解。
    示例2:
    image.png
    该示例中,deadline携带了特殊含义“截止时间”,有助于程序理解
  • 流程控制
    避免嵌套if/else、尽量保证正常代码路径为最小缩进,优先处理特殊或异常情况,尽早返回减少嵌套
    示例:

image.png

image.png

  • 错误和异常处理

针对Go性能优化建议

  • slice、map内存预分配
    尽量在make()初始化切片时提供容量信息,减少内存拷贝、扩容等消耗
  • copy()代替re-slice
    切片会复用底层数组,导致原始数组内存被引用不能释放
  • 字符串处理
    使用strings.Builder,“+”拼接字符串性能差。这是因为在GO中字符串是不可变类型,使用+每次都会重新分配内存。strings.Builder底层是[]byte数组,有扩容策略,不需要重新分配内存。
  • 空结构体
    节省内存,作为占位符,可以用map实现set
  • atomic包

小结

  • 避免常见的性能陷阱可以保证程序大部分性能
  • 不需要过分追求性能
  • 高级方法实现性能优化容易出现问题
  • 在满足正确可靠、逻辑清晰的质量要求下提高程序性能
    此外,在本次学习中,很多知识需要在实践中去认识,在今后开发中需要多注意。