这是我参与「第五届青训营」伴学笔记创作活动的第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、堆、协程、锁、阻塞等监控
三、实践练习例子
四、课后个人总结
- 本次学习对如何写出简单、易用、易读的代码有了新的连接
- 学会了用工具对运行的程序监控,并针对具体情况调整优化