Golang代码工具使用
工欲善其事必先利其器
在学习golang的过程中,经常遇到教程让代码遵循gofmt
,golint
,govet等
,而我虽然有Goland的加持,但对其中的区别也是稀里糊涂,在这里做一个简单的总结,主要参考的官方的CodeTools专栏。感谢Google!
1. 什么是 Linting?
Linting是自动检查源代码中是否存在编程错误和样式错误。这可以通过使用lint 工具(也称为linter)来完成。lint 工具是基本的静态代码分析器
术语linting最初来自于C语言的Unix实用程序。当然现在有许多可用于各种编程语言的代码linter
1.1 为什么 Linting 重要?
Linting对于减少错误和提高代码的整体质量很重要。使用lint 工具可以通过早期发现错误来帮助加速开发并降低成本
1.2 Lint Tools 是如何工作的
这是lint 工具通常如何适应开发过程的方式。
- 编写代码
- 编译
- 用linter进行分析
- 查看该工具识别的错误
- 更改代码以解决错误
- 代码干净后,链接模块。
- 用linter对其进行分析
- 进行手动代码审查
lint 编程是一种自动检查。它应该开发早期进行,在代码审查和测试之前。那是因为自动代码检查使代码审查和测试过程更加有效,使开发人员有时间专注于正确的事情。
关于lint其他一些方面的可以查阅这里
2. Lint工具介绍
gofmt - standard Go code formatter
它使用制表符进行缩进,并使用空格进行对齐。对齐方式使用的是编辑器固定宽度的字体golint - Detects style mistakes in Go code
检测样式错误,比如函数的注释,变量的注释等等goimports - Format code and fix your import statements
更新Go的import行,添加缺少的行并删除未引用的行govet - Examine Go source code
检查Go的源代码并报告可疑的部分,例如其参数与格式字符串不一致的Printf调用。vet使用的试探法不能保证所有报告都是真实的问题,但可以发现编译器未捕获的错误golangci-lint - Bundle of gofmt, golint, govet and many other tools
一把梭,各种linter都有
关于其中的一些区别:
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自带了vet
,fmt
,import
,我已经养成了习惯,每完成更新一个就会手动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”**!
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!