Go高质量编程与性能调优 | 青训营笔记

56 阅读2分钟

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

一、目录

本节课主要分为四个部分:

1.Go 语言编码规范

2.Go 语言性能优化建议

3.性能分析工具pprof的使用

4.性能调优实际案例

这里主要介绍前两个部分。

二、Go 语言编码规范

编程原则:简单性(消除复杂性)、可读性(编写可维护代码的第一步是确保代码可读)、生产力(团队整体工作效率非常重要)。

编程规范:

1.代码格式

gofmt:Go 语言官方提供的工具,能自动格式化Go 语言代码为官方统一风格,常见IDE都支持方便的配置。

goimports:Go 语言官方提供的工具,实际等于gofmt加上依赖包管理,自动增删依赖的包引用、将依赖包按字母序排序并分类。

2.注释

注释应该做什么?

1.注释应该解释代码作用。

2.注释应该解释代码如何做的。

3.注释应该解释代码实现的原因。

4.注释应该解释代码什么情况会出错。

公共符号始终要注释。

代码是最好的注释,注释应该提供代码未表达出的上下文信息。

3.命名规范

1.简洁胜于冗长。

2.缩略词全大写。

3.变量距离其被使用的地方越远,则需要携带越多的上下文信息。

4.控制流程

1.避免嵌套,保持正常流程清晰。

2.尽量保持正常代码路径为最小缩进。

5.错误和异常处理

1.简单错误(仅出现一次的错误,且在其他地方不需要捕获该错误):优先使用errors.New来创建匿名变量来直接表示简单错误;如果有格式化的需求使用fmt.Errorf。

2.错误的Wrap和Unwrap:Wrap提供了一个error嵌套另一个error的能力,从而生成一个error的跟踪链。

3.错误判定:判定一个错误是否为特定错误,使用errors.Is;在错误链上获取特定种类的错误,使用errors.As。

4.panic:不建议在业务代码中使用panic,调用函数不包含recover会造成程序崩溃,若问题可以被屏蔽或解决,则建议使用error代替panic。

三、Go 语言性能优化建议

1.Benchmark

Go 语言提供的支持基准性能测试的benchmark工具。

2.slice

预分配内存:尽可能在使用make()初始化切片时提供容量信息。

3.map

预分配内存:尽可能在使用make()初始化map时提供容量信息。

4.字符串拼接

使用strings.Builder和bytes.Buffer。

5.空结构体

使用空结构体节省内存。

6.atomic包

效率比直接加锁高。