这是我参与「第五届青训营」伴学笔记创作活动的第3天
1.高质量编码规范
1.高质量标准:
编写的代码能够达到正确可靠、简洁清晰的目标可称之为高质量代码。(这是老师给出的见解,从我个人的角度,我更愿意用另一种说法来描述这一标准,即除了代码的正确和高效之外,还必须要能够让刚刚了解使用的语言和框架的人轻易读懂,才能够称得上是好代码。)
2.编程原则(语言无关)
简单性(老师说了很多,我认为无非是奥卡姆剃刀原理,如无必要,勿增实体,消除复杂的逻辑,便于后续修复改进)
可读性(代码最根本是给人看的。这一点很重要,你的代码不是孤立的,肯定后面还会有人来看、来改进,别人能看懂是代码不断成长的前提。)
生产力(为了团队合作,代码的风格要一致,可以提升整体的效率。)
3.编码规范(具体实践)
代码格式:推荐使用gofmt自动格式化代码(应用广泛,便于统一)
注释:公共符号必须注释、解释一下实现过程、解释一下需要注意的重点。(Tips:除了解释代码本身,还应该解释代码在何种情况下会出错,出错的内容,这一点以前很少注意到,还是应该引起注意!)
命名规范:
变量:命名简洁、缩略词大写(开头时小写)、离用到的地方越远越应该详细命名。
函数:简短、不携带包名的上下文信息(因为两者常成对出现)。
包名:全小写、简短、不与库重名。
控制流程:少嵌套(有错早返回,return语句不要写好几个)。
错误处理:简单错误(errors.New)复杂错误(wrap和Unwrap)
2.性能调优的一些建议
1.如何评估性能?
用数据进行验证:Benchmark工具(Go自带)。
2.一些建议
slice:初始化预分配内存(先说好有多大,避免了底层进行多次扩容。花费时间是原来的三分之一!!!)用大切片创建小切片,不用re-slice用copy(前者会导致大切片整个空间因为仍被引用而得不到释放。)
map:预分配内存(同理)
字符串:用string.Builder来拼接字符串,byte.Buffer差不多,直接“+”差距很大(go中字符串是不可变类型,前两者底层都是byte数组,使用+的话每次都会重新开辟空间。)
空结构体:需要占位符时,可以使用空结构体(不占任何内存,其本身可代表此处不需要任何值的意思)
3.推荐阅读的相关博客
[代码规范]Go语言编码规范指导 - 知乎 (zhihu.com)
Go 经典译文:Uber 开源的《Go 语言编码规范》 | Go 技术论坛 (learnku.com)
(57条消息) 【golang】Go 性能优化技巧_张忠琳的博客-CSDN博客_golangcpu优化
【奥卡姆剃刀原则】简单有效原理的思维模型 - 知乎 (zhihu.com)
---图片来源于网络,仅作学习交流之用。