Go语言中常用的代码优化点
# Go语言中常用的代码优化点
第一点:使用 pkg/errors 而不是官方 error 库
一个项目中使用错误机制,最核心的需求主要是两点:
- 附加信息:希望错误出现的时候能附带一些描述性的错误信息,甚至这些信息是可以嵌套的;
- 附加堆栈:希望错误不仅仅打印出错误信息,也能打印出这个错误的堆栈信息,可以知道出错的具体代码。
在 Go 语言的演进过程中,error 传递的信息太少一直是被诟病的一点。使用官方的 error 库,只能打印一条简单的错误信息,而没有更多的信息辅助快速定位错误。所以,推荐在应用层使用 github.com/pkg/errors 来替换官方的 error 库。因为使用 pkg/errors,不仅能传递出标准库 error 的错误信息,还能传递出抛出 error 的堆栈信息。
第二点:在初始化 slice 的时候尽量补全 cap
在初始化[]int slice 的时候尽量先预估 cap 长度,在 make 中设置 cap 的长度,就是 slice 的大小。
如果在初始化 slice 的时候没有设置 cap ,后期可以使用 growslice 来扩充 slice 容量,每当 slice 容量小于需要使用的 slice 大小,这个函数就会被触发。
它的机制就好比是原先没有定制容量,系统给了一个能装两个鞋子的盒子,但是当装到第三个鞋子的时候,这个盒子就不够了,就要换一个盒子,而换这个盒子,势必还需要将原先的盒子里面的鞋子也拿出来放到新的盒子里面。而 growsslice 的操作是一个比较复杂的操作,它的表现和复杂度会高于最基本的初始化 make 方法。对追求性能的程序来说,应该能避免就尽量避免。
第三点:初始化一个类的时候,如果类的构造参数较多,尽量使用 Option 写法
Option 写法,就是将所有可选的参数作为一个可选方式,一般会设计一个“函数类型”来代表这个 Option,然后配套将所有可选字段设计为一个这个函数类型的具体实现。在具体的使用的时候,使用可变字段的方式来控制有多少个函数类型会被执行。
第四点:巧用大括号控制变量作用域