学习笔记 编码规范和性能调优| 青训营

41 阅读2分钟

前言

本学习笔记是根据字节内部课:高质量编程与性能调优实战这一节,通过视频和自己的理解来完成了一个学习笔记,可能有错误和误解,请多多理解。

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来实现并发。