Go高质量编码 | 青训营笔记

49 阅读2分钟

高质量编码

  1. 简介

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

  1. 编码规范(降低阅读理解代码的成本)

    1.注释,公共符号始终要注释,注释应该解释代码作用、如何做(实现过程)、实现原因、出错情况,不需要注释实现接口的方法

    2.代码格式,gofmt自动同意风格,goimports自动增删依赖的包引用,按字母排序分类 3.命名规范,简介,缩略词全大写(位于开头且不需要导出使用全小写,携带更多上下文信息);函数名简短,不携带包名的上下文信息;包名小写简短、不与标准库同名;

    4.控制流程,避免嵌套,尽量保持正常代码路径为最小缩进,线性原理、直线处理逻辑

    5.错误和异常处理

3.性能优化建议-Benchmark工具

1. slice预分配内存make([]int,0,size)

2. 大内存未释放,使用copy在原切片的基础上新建小切片

3. map预分配内存make(map[int]int,size)

4. 字符串处理strings.Builder

5. 空结构体

4. 性能调优分析工具

  1. pprof

分析部分-有两种方式 具体的工具-可以在runtime/pprof中找到源码,同时Golang的http标准库中也对pprof做了-些封装,能让你在http服务中直接使用它采样部分-它可以采样程序运行时的CPU、堆内存、goroutine、 锁竞争、阻塞调用和系统线程的使用数据展示-用户可以通过列表、调用图、火焰图、源码、反汇编等视图去展示采集到的性能指标。

在实际工作中,当服务规模比较小的时候,可能不会触发很多性能问题,同时性能优化带来的效果也不明显,很难体会到性能调优带来的收益而当业务量逐渐增大,比如一个服务使用了几千台机器的时候,性能优化一个百分点,就能节省数百台机器,成本降低是非常可观的接下来我们来了解下工程中进行性能调优的实际案例 程序从不同的应用层次上看,可以分为业务服务、基础库和G语言本身三类,对应优化的适用范围也是越来越业务服务一般指直接提供功能的程序,比如专门处理用户评论操作的程序基础库一般指提供通用功能的程序,主要是针对业务服务提供功能,比如监控组件,负责收集业务服务的运行指标另外还有对Go语言本身进行的优化项