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

61 阅读2分钟

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

重点内容

image.png

高质量编程

编码规范

代码格式

使用gofmt自动格式化代码,保证所有的Go代码与官方推荐格式保持一致

注释

  • 注释应该解释代码作用
  • 对代码中复杂的,并不明显的逻辑进行说明,适合注释实现过程
  • 注释应该解释代码实现的原因
  • 注释应该解释代码什么时候会出错
  • 对公共符号进行注释

命名规范

变量命名

  • 简洁胜于冗长
  • 缩略词全大写,但当其在变量开头且不需要导出时,使用全小写
  • 变量距离其使用距离越远,需要携带更多的信息

函数命名

  • 函数名不携带包名的上下文信息,因为包名和函数名总是成对出现的
  • 函数名尽量简短
  • 当名为foo的包某个函数返回类型Foo时,可以省略类型信息而不导致歧义
  • 当名为 foo 的包某个函数返回类型T时(T并不是Foo),可以在函数名中加入类型信息

控制流程

  • 避免嵌套,保持流程清晰
  • 尽量保持正常代码路径为最小缩进

错误和异常处理

优先使用 errors.New 来创建匿名变量来直接表示简单错误

如果有格式化的需求,使用 fmt.Errorf

对于复杂的错误

错误的包装提供了一个error嵌套另一个error的能力,生成一个error的跟踪链,同时结合错误的判定方法来确认调用链中是否有关注的错误出现。这个能力的好处是每一层调用方可以补充自己对应的上下文,方便跟踪排查问题,确定问题的根本原因在哪里

不建议在业务代码中使用panic

特殊地,当程序启动阶段发生不可逆转的错误时,可以在init或main函数中使用panic

性能优化

  • 性能优化的前提是满足正确可靠、简洁清晰等质量因素
  • 性能优化是综合评估,有时候时间效率和空间效率可能对立
  • 针对Go语言特性,介绍Go相关的性能优化建议