这是我参与「第三届青训营 -后端场」笔记创作活动的第4篇笔记
近况:所谓取法乎上,得乎其中,通过大量阅读代码规范相关的文章,以及自己亲身实践,现在差不多能写出像模像样的中质量的代码了。
如何定义高质量的代码是主观的,但是高质量代码的作用是客观的
不同语言语法虽然不同,但是代码规范的规则是相通的,说是规则,其实也是根据实际场景总结出来的经验。 规则简单,实践很难。
- 简单性(不要写过于复杂的代码以及无法排查问题和重构的代码)
- 可读性(代码给人看,不好的代码浪费大家的时间)
- 生产力(重视团队效率,统一代码格式,独特的代码风格并不是好事)
1.补充《go代码review建议》
注释回答四问题:
- 代码作用
- 代码如何作用
- 代码为何作用
- 代码失效原因
Good code has lots of comments,bad code requires lots of comments
2. 性能优化建议:
- 学习使用benchmark测试代码
- slice,map预分配内存以及注意释放内存
sl:=make([]type ,0,size)- 使用Builder或buffer处理字符串并且预分配内存 (两者底层都是[]byte,而string内存是固定的)
var builder strings.Builder
builder.Grow(n*len(string))
for i=0;i<n;i++
builder.writerstring(string)
- 使用空结构体占位(空结构本身不占内存空间)
m:=make(map[int]struct{}
for int i=0;i<=nums;i++
m[i]=struct{}{}
- 使用atomic包(操作由硬件实现,性能比锁高,锁最好运用来保护一段逻辑)
3.性能调优实战
数据分析不是凭空猜测,优化终点不是细枝末节,不要为了优化而优化(过犹不及)
pprof-可视化性能和数据的工具
3.1pprof排查实战
从github上下载项目源码
浏览器中打开http://localhost:6060/debug/pprof
排查了埋藏在内存,协程,锁和阻塞部分的炸弹
重点需要熟悉:火焰图,逐步排查的思想,可视化分析命令操作
##学习总结:
我目前是一个代码能跑就行选手,以前存在代码优化的误区 1.死抠细枝末节,而不是重点。 2.代码缺少注释,可能由于团队合作经验的缺乏。 3.不会是用调试工具,以后需要熟悉练习pprof的操作(现在使用起来还是云里雾里的)