高质量编程与性能调优
day5
高质量编程
简介
什么是高质量?
编写的代码能够达到正确可靠、简洁清晰的目标可称之为高质量代码
如:
各种边界条件是否考虑完备
异常情况处理,稳定性保证
易读易维护
编程原则
实际应用场景千变万化,各种语言的特性和语法各不相同 但是高质量编程遵循的原则是相通的
简单性
1.消除“多余的复杂性”,以简单清晰的逻辑编写代码
2.不理解的代码无法修复改进
可读性
1.代码是写给人看的,而不是机器
2.编写可维护代码的第-步是确保代码可读
生产力
1.团队整体工作效率非常重要
编码规范
代码格式
这是后面规范的基础
可以使用gofmt自动格式化代码
gofmt:Go语言官方提供的工具,能自动格式化Go语言代码为官方统一风格常见IDE都支持方便的配置
注释
注释应该做的:
1.注释应该解释代码作用 -----适合注释公共符号
2.注释应该解释代码如何做的 -----适合实现过程
3.注释应该解释代码实现的原因 -----适合解释代码的外部因素 提供额外上下文
4.注释应该解释代码什么情况会出错 -----适合解释代码的限制条件
公共符号始终要注释!!
代码是最好的注释,注释应该提供代码未表达出的上下文信息
命名
1.要简洁
2.缩略词大写,但当其位于变量开头且不需要导出时,使用全小写
3.变量距离其被使用的地方越远,则需要携带越多的上下文信息
4.package:只由小写字母组成,不包含大写和 下划线;简短并包含上下文信息;不与标准库同名
5.functio:在命名时包名信息可不带,比如:http.serve 不需要用http.serveHTTP
核心:降低阅读理解代码成本
控制流程
1.要避免嵌套
2.尽量保持正常代码路径为最小缩进
3.线性原理,正常流程代码沿着屏幕向下移动
异常处理
简单错误直接表示
复杂错误要Wrap和Unwarp
性能优化建议
简介
性能优化的前提是满足正确可靠、简洁清晰等质量因素
性能优化是综合评估,有时候时间效率和空间效率可能对立
针对Go语言特性,介绍Go相关的性能优化建议
silce预分配内存
尽可能在使用make()初始化切片时提供容量信息
原理: 扩容是会发生拷贝的,所以应尽量避免
map预分配内存
不断向 map 中添加元素的操作会触发 map 的扩容
提前分配好空间可以减少内存拷贝和 Rehash 的消耗
建议根据实际需求提前预估好需要的空间(感觉和silce原理差不多)
字符串处理
建议用strings.Builder和bytes.Buffer
在知道string长度情况下可以预分配
atomic包
锁的实现是通过操作系统来实现,属于系统调用
atomic 操作是通过硬件实现,效率比锁高
总结
通过本节课了解了一些自己从没有注意的一些东西,也大致了解了代码规范的相关知识,期待可以带入实战,同时通过性能调优的课程也理解了调高速度可以通过减少内存拷贝等方式来实现