zl程序教程

您现在的位置是:首页 >  其他

当前栏目

Go语言中常见100问题-#16 Not using linters

2023-02-18 16:32:46 时间

不使用 linter

linter是一种用于分析代码和捕获错误的自动工具。本文内容不是列举通过linter检查出来的所有问题,而是通过个别例子来理解linter为什么重要,为什么对Go项目开发是必不可少的。

下面通过一个具体的例子来说明为什么linter很重要。在Go语言中常见100问题-#1 Unintended variable shadowing文中,讨论了与变量遮蔽相关的潜在错误。使用vet,它是Go工具集中的标准linter,结合shadow可以检测出遮蔽变量问题。

package main
 
import "fmt"
 
func main() {
    i := 0
    if true {
        i := 1
        fmt.Println(i)
    }
    fmt.Println(i)
}

由于vet已集成在标准库中,所以只需要安装shadow工具,安装方法如下,然后联合vet工具,对上面的代码进行检查,输出结果如下。

$ 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提交钩子中,在提交代码前做风格检查等操作。