第三次课堂记录 | 青训营笔记

91 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第3篇笔记.

一、高质量编程

1.1 高质量编程简介

  • 什么是高质量? 编写代码达到正确可靠,简洁清晰
  1. 边界条件是否完备
  2. 异常情况处理,稳定性保证
  3. 容易读容易维护

编程原则

简单性

  • 消除复杂性,简单清晰逻辑编写代码
  • 不理解的代码无法修复 可读性
  • 阅读者是人类而非机器
  • 编写可维护的代码第一步是确保代码可读 生产力 团队整体工作效率很重要

1.2 编码规范

  • 代码格式 推荐使用gofmt自动格式化代码

Go语言官方提供的工具,常见IDE都支持的方便配置

goimports

实际等于gofmt加上依赖包管理,自动增删依赖的包引用,按字母序排序分类

  • 注释
  1. 注释需要解释代码的作用
  2. 注释解释代码如何做的
  3. 注释解释代码实现的原因
  4. 注释解释代码什么条件下会出错
  • 命名规范
  1. 简洁胜于冗长
  2. 缩略词全部大写,当其位于变量开头不需要导出时,全小写
  3. 变量距离使用较远,要携带更多的上下文信息。
  • 控制流程
  1. 尽量保持代码路径为最小缩进 小结
  2. 显性原理,处理逻辑尽量走直线,避免嵌套逻辑
  3. 正常流程代码沿着屏幕向下
  4. 提升代码可维护性和可读性
  5. 故障问题大多出现在逻辑复杂和循环语句中

1.3 性能优化建议

  1. 前提是满足正确可靠、简洁清晰的质量因素
  2. 性能优化是综合评估,很有可能出现时间与空间不可兼得的情况 Benchmark
  • 性能表现需要实际数据衡量
  • Go语言支持基准的Benchmark测试

image.png

slice

  • slice预分配内存
  • 尽可能使用make()初始化切片时提供容量信息

Map

  • 不断向其中添加元素会触发扩容
  • 提前分配好空间可以减少内存拷贝和Rehash消耗
  • 根据实际需求提前预估好需要的空间

字符串处理

  • strings.Builder 性能最差 “+”
  • bytes.Buffer

image.png

空结构体

image.png

atomic包

  1. 锁的实现是通过操作系统实现的,属于系统调用
  2. atomic实现通过硬件实现,效率大于锁
  3. sync.Matrix应该用来保护一段逻辑,不仅仅用于保护一个变量
  4. 对于非数值操作,可以使用atomic.Value,可以承载interface{}