青训营课程go性能调优 | 青训营笔记

49 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 1天

1.1高质量编码 ·边界条件 ·异常处理 ·易读和后期维护

1.2编码规范

  • ·代码格式
  • ·注释
  1. 解释代码如何工作
  2. 解释代码实现的原因
  3. 解释代码什么情况出错
  4. 公共符号始终要注释

公共的符号:指的是程序里面共用的变量、常量、函数以及结构体

  • 命名规范
  • 控制流程

优先处理错误情况/特殊情况,尽早返回或继续循环减少嵌套

  • ·错误和异常处理

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的一些基础底层原理,后来的工具使用感觉还是要与实践项目结合才能更有体会,所以就没有做笔记,等以后做项目在来与理论和实践结合