Go语言学习指南:惯例模式与编程实践
上QQ阅读APP看书,第一时间看更新

1.4 分析与审查

虽然go fmt可以确保代码格式正确,但这只是确保代码符合Go语言惯例且高质量的第一步。所有的Go开发者都应该阅读Effective Go(https://oreil.ly/GBRut)和Go wiki(https://oreil.ly/FHi_h)上的Code Review Comments页面,以了解什么样的代码符合Go语言惯例。

有一些工具可以帮助增强这种风格。第一个工具叫作golint。术语“linter”来自贝尔实验室的UNIX团队,第一个linter写于1978年。golint试图确保代码遵循风格准则。它建议的一些更改包括:正确地命名变量、格式化错误信息,以及在公共方法和类型上添加注释。这些都不是错误,不会导致程序无法编译或运行不正确。此外,你不能自动假设golint是100%准确的,因为golint发现的问题类型比较模糊,所以有时会出现错误的分析结果。这意味着不必完全按照golint的建议进行修改,但你应该认真对待golint的建议。Go开发者希望代码遵循良好的代码规范,否则会出现很多问题。

安装golint

运行:

这样就可以在整个项目中运行golint

开发者还会遇到另外一种错误:代码在语法上是正确的,但是出现一些你不愿意看到的错误。诸如给格式化方法传递了错误的参数数量,或者给从未使用过的变量赋值。使用go工具集中名为go vet的命令来检测这类错误。用下面的命令在代码上运行go vet

还可以用额外的第三方工具来检查代码格式和扫描潜在的bug。然而,在代码上运行多个工具会降低构建速度,因为每个工具都要花费时间扫描源代码。因此,与其使用单独的工具,不如使用golangci-linthttps://oreil.ly/O15u-)同时运行多个工具。golangci-lint结合了golintgo vet和不断增加的其他代码质量工具集。

一旦安装了它(https://oreil.ly/IKa_S),你就可以用以下命令运行golangci-lint

由于golangci-lint运行了如此多的工具(截至本书撰写时,它默认运行10种不同的linter,并有另外50种可以启用),所以你的团队难免对其中的一些建议产生异议。你可以通过在项目根部加入一个名为.golangci.yml的文件来配置启用哪些linter以及分析哪些文件。请参阅文档(https://oreil.ly/vufj1)了解文件格式。

建议在一开始使用go vet作为自动构建过程的必要部分,并使用golint作为代码审查过程的一部分(因为golint可能会有错误的分析结果,你不能要求团队修复它报告的每个问题)。一旦你习惯了他们的建议,可以尝试golangci-lint并调整它的设置,直到它适合你的团队。

 将golintgo vet(或golangci-lint)作为开发流程的一部分,可以避免常见的bug和不规范的代码。但如果你正在使用golangci-lint,请确保你的团队同意你要执行的规则。