青训营day3 高质量编程与性能优化 | 青训营笔记

94 阅读2分钟

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

一、本堂课重点内容

  • 编码质量
  • 性能调优

二、详细知识点介绍

1 高质量编程

1.1 编程原则

  • 简单性:代码逻辑清晰,去除不必要的复杂逻辑
  • 可读性:易于理解,易于维护
  • 生产力:团队协作效率,代码性能

1.2 编码规范

  • go有专门的代码格式化工具,gofmt、goimports
  • 注释:明确表达代码的作用,原理,原因,以及出错情况
  • 命名规范
    • 变量:简洁但不失含义,缩略词大写,合理调整上下文信息
    • 函数:函数名不携带包名的上下文信息、尽量简短
    • 包:只由小写字母组成,不要与标准库重名
  • 控制流程:避免嵌套,优先处理错误情况(避免过多缩进)
  • 错误和异常处理:
    • error:尽可能描述上下文信息
    • panic:在不可避免的异常下使用
    • recover:在当前的goroutine中被defer调用

1.3 性能优化建议

  • 对于确定大小的slice,map预分配内存,避免自动扩容算法浪费资源
  • 使用strings.Builder替代原始的"+"号拼接字符
    • "+"号拼接字符串,因为字符串本身不可修改,所以系统会单独开辟新的内存来存放新的串,这样会额外花费时间
    • strings.Builder则不会
  • 在使用map时,如果只关心key,而不关心value,可以让value等于空结构体,节省内存
  • 在多协程使用锁时,用atomic替代sync.Mutex
    • sync.Mutex设计内核状态切换耗费资源过多

2 性能调优

2.1 性能调优原则

  • 依靠数据而非猜测
  • 抓大放小,不执着于细枝末节
  • 合理优化,不要过早,也不要过度

2.2 分析工具pprof

  • pprof是用于可视化和分析性能分析数据的工具
  • 可以对cpu、堆、协程、锁、阻塞等监控

三、实践练习例子

image.png

四、课后个人总结

  • 本次学习对如何写出简单、易用、易读的代码有了新的连接
  • 学会了用工具对运行的程序监控,并针对具体情况调整优化

五、引用参考