前言
本学习笔记是根据字节内部课:高质量编程与性能调优实战这一节,通过视频和自己的理解来完成了一个学习笔记,可能有错误和误解,请多多理解。
Go 高质量编程
编码规范
1.使用gofmt自动格式化代码,进而保持一致的代码风格,对于 GoLand,可以在 Settings – Tools – Actions on Save 中打开 Reformat code 和 Optimize imports。也可通过 Ctrl+Alt+L 快捷键格式化代码其实,所有 Jetbrains 的 IDE 都支持使用这个快捷键格式化代码
2.使用有意义的命名,遵循Go语言的命名惯例,简洁的命名比冗长的好,缩略词全大写,但当其位于变量开头且不需要导出时,使用全小写,变量距离其被使用的地方越远,则需要携带更多的上下文信息。比如将变量名deadline 换成 time 就降低了变量名的信息量,会让他人认为这个变量只是单纯的一个时间表示。但前者特指截止时间,而后者仅是代表某个时间。
3.使用清晰的注释,解释代码的用途和实现细节
一个好的代码注释应当做到以下几点:
- 解释代码作用;注释应当清晰、简洁地解释代码的功能、目的和实现方式,避免冗长和复杂的描述
- 解释代码如何做的;注释应当准确地描述代码的逻辑和实现细节,避免误导读者
- 解释代码实现的原因;注释应当补充代码的信息,而不是重复代码本身已经表达的内容
- 解释代码什么情况会出错;
4使用panic和recover来处理错误,避免使用错误码- 对于简单错误(仅出现一次,在其他地方不需要捕获),优先使用 errors.New 创建匿名变量直接表示;如有格式化需求,使用 fmt.Errorf;
- 在
fmt.Errorf中使用%w将一个错误关联至错误链中; - 使用
errors.Is判定一个错误为特性错误,比起直接使用==的好处是可以判断错误链上的所有错误是否含有特定错误; - 使用
errors.As获取错误链上特定种类的错误; - 只有在程序启动阶段发生不可逆转的错误时才使用
panic
性能调优
1使用性能分析工具,如pprof,来找出代码中的性能瓶颈- 当需要占位符时,可使用空结构体(struct{})代替,其不会占据镇和内存空间;
- 使用
atomic包代替锁修改变量; - 避免在循环中进行频繁的内存分配和释放,尽量复用对象。 使用并发编程来提高程序的性能,使用goroutine和channel来实现并发。