Golang代码工具使用

工欲善其事必先利其器

在学习golang的过程中,经常遇到教程让代码遵循gofmtgolintgovet等,而我虽然有Goland的加持,但对其中的区别也是稀里糊涂,在这里做一个简单的总结,主要参考的官方的CodeTools专栏。感谢Google!

1. 什么是 Linting?

Linting是自动检查源代码中是否存在编程错误和样式错误。这可以通过使用lint 工具(也称为linter)来完成。lint 工具是基本的静态代码分析器
术语linting最初来自于C语言的Unix实用程序。当然现在有许多可用于各种编程语言的代码linter

1.1 为什么 Linting 重要?

Linting对于减少错误和提高代码的整体质量很重要。使用lint 工具可以通过早期发现错误来帮助加速开发并降低成本

1.2 Lint Tools 是如何工作的

这是lint 工具通常如何适应开发过程的方式。

  1. 编写代码
  2. 编译
  3. 用linter进行分析
  4. 查看该工具识别的错误
  5. 更改代码以解决错误
  6. 代码干净后,链接模块。
  7. 用linter对其进行分析
  8. 进行手动代码审查

lint 编程是一种自动检查。它应该开发早期进行,在代码审查和测试之前。那是因为自动代码检查使代码审查和测试过程更加有效,使开发人员有时间专注于正确的事情。
关于lint其他一些方面的可以查阅这里

2. Lint工具介绍

关于其中的一些区别:

Golint differs from gofmt. Gofmt reformats Go source code, whereas golint prints out style mistakes.
Golint differs from govet. Govet is concerned with correctness, whereas golint is concerned with coding style. Golint is in use at Google, and it seeks to match the accepted style of the open source Go project

3. 工具的选择

因为我用的Goland,IDE自带了vetfmtimport,我已经养成了习惯,每完成更新一个就会手动format一下,当然也可以放置在File Watcher 中自动格式化。之后每次的commit都lint一下,然后用golangci-lint查一下一些错误,比如if isExist == True检查改为if isExist,为初学者矫正很多写代码的错误习惯。

但是在golint官方有这么一段话:

The suggestions made by golint are exactly that: suggestions. Golint is not perfect, and has both false positives and false negatives. Do not treat its output as a gold standard. We will not be adding pragmas or other knobs to suppress specific warnings, so do not expect or require code to be completely “lint-free”. In short, this tool is not, and will never be, trustworthy enough for its suggestions to be enforced automatically, for example as part of a build process. Golint makes suggestions for many of the mechanically checkable items listed in Effective Go and the CodeReviewComments wiki page.

请不要将golint的输出建议视为黄金标准! 不用搞得像个强迫症患者(我稍微有点,哈哈)一样,一定要完全**”lint-free”**!