不使用 linter
linter是一种用于分析代码和捕获错误的自动工具。本文内容不是列举通过linter检查出来的所有问题,而是通过个别例子来理解linter为什么重要,为什么对Go项目开发是必不可少的。
下面通过一个具体的例子来说明为什么linter很重要。在Go语言中常见100问题-#1 Unintended variable shadowing文中,讨论了与变量遮蔽相关的潜在错误。使用vet,它是Go工具集中的标准linter,结合shadow可以检测出遮蔽变量问题。
代码语言:javascript复制package main
import "fmt"
func main() {
i := 0
if true {
i := 1
fmt.Println(i)
}
fmt.Println(i)
}
由于vet已集成在标准库中,所以只需要安装shadow工具,安装方法如下,然后联合vet工具,对上面的代码进行检查,输出结果如下。
代码语言:javascript复制$ go install
golang.org/x/tools/go/analysis/passes/shadow/cmd/shadow
$ go vet -vettool=$(which shadow)
./main.go:8:3:
declaration of "i" shadows declaration at line 6
正如上面看到的,vet工具提示我们变量i被遮蔽。使用适当的linter可以检查潜在的错误,让我们的代码更健壮。
「NOTE:linter没有涵盖本系列文章中所有的错误,建议各位同学继续阅读本系列其它文章。」 本文的目标不是列举所有的linter问题,如果你想更深入学习这方面内容,可以查阅下面的链接文章。
- https://golang.org/cmd/vet/(Go语言语法检查工具)
- https://github.com/kisielk/errcheck(错误检查分析工具)
- https://github.com/fzipp/gocyclo(圈复杂度分析工具)
- https://github.com/jgautheron/goconst(重复字符串常量分析工具)
除了上面列举的检查工具,还应该使用代码格式化工具修复代码风格。下面是一些常用的代码格式化工具:
- https://golang.org/cmd/gofmt/(标准Go代码格式化工具)
- https://godoc.org/golang.org/x/tools/cmd/goimports(标准Go导入格式化工具)
此外,我们也应该关注golangci-lint(https://github.com/golangci/golangci-lint), 它集成了多种静态语法插件,有许多linter可以使用。允许并行运行以提高代码分析速度,非常的便捷。
linter和格式化程序是提高代码质量、保持代码风格一致的有力方法,我们应该花点时间了解如何使用它们,并且能够自动执行检查,例如将这些检查集成到CI或git提交钩子中,在提交代码前做风格检查等操作。