这是我参与「第五届青训营 」伴学笔记创作活动的第 1天
1.1高质量编码 ·边界条件 ·异常处理 ·易读和后期维护
1.2编码规范
- ·代码格式
- ·注释
- 解释代码如何工作
- 解释代码实现的原因
- 解释代码什么情况出错
- 公共符号始终要注释
公共的符号:指的是程序里面共用的变量、常量、函数以及结构体
- 命名规范
- 控制流程
优先处理错误情况/特殊情况,尽早返回或继续循环减少嵌套
- ·错误和异常处理
error,panic ,recover
error:返回一些不致命的错误
panic:返回一些致命的错误,会导致程序崩掉,但是在程序宕机之前,会将压入defer函数栈的函数执行完毕,然后挂掉 recover:go语言为我们提供了专用于“拦截”运行时panic的内建函数recover。它可以是当前的程序从运行时panic的状态中恢复并重新获得流程控制权。
一般而言只用 error 错误处理,panic 是重大异常;error 是程序员可以预知的错误,panic 是程序员预料之外的异常
所以有一个原则就是我们写代码时候尽量使用 error 进行错误处理,尽量去避免 panic 处理
1.3.1 性能优化建议 -Slice
slice 预先分配内容
分配内存 ·尽可能在使用make()初始化切片时提供容量信息
另一个陷阱:大内存为释放,
在原有的切片创建小切片,会使得大内存中有引用,得不到释放,
return origin[len(origin)-2]
建议通过copy()来重新创建一个切片 copy(resul,origin[len(origin)]-2:])
- map 可与slice同理优化
map 通过预分配内存
1.3.2 性能优化建议-字符串处理(string处理类似JAVA)
使用strings.Builder
strings.Builder 最快,bytes.Buffer 较快,+ 最慢 buffer转换字符串会重新申请内存,builder转换字符串直接通过原有byte数组转换字符串 可通过预分配进一步提速
1.3.3 空结构体优化 可以通过空结构作为占位符,空结构实例不占用任何空间
本次的学习是可以认我们可以了解和清楚一下性能调优的大概思路,同时也了解和巩固一下go的一些基础底层原理,后来的工具使用感觉还是要与实践项目结合才能更有体会,所以就没有做笔记,等以后做项目在来与理论和实践结合