golangci-lint是非常流程的静态代码检查工具。具有以下优点:

  • 速度非常快
  • 可配置
  • IDE集成
  • linter聚合器
  • 最小的误报错
  • 良好的输出

静态代码检查

直接使用golangci-lint run命令即可对当前目录及子目录下的所有go文件进行静态代码检查。

同样可以设置参数来指定想要进行检查的文件或者目录,不过要注意,如果目录要递归检查,需要加上/...后缀,例如

golangci-lint run dir1 dir2/... dir3/file.go

通过-c参数指定配置文件来进行静态代码检查。

使用-E参数来指定启用linter。-D参数来指定禁用的linter。

linter可能出现误报,可以:

  • 命令行使用-e参数或者配置文件的issues.exclude设置要排除的检查错误。使用issues.exclude-rules来配置哪些文件忽略哪些linter。
  • 通过run.skip-dir, run.skip-files来忽略指定目录下的Go文件,或指定的go文件。
  • 源码使用//nolinter注释,来忽略指定的代码行。同时还可以指定不用的linter。

在行末添加//nolinter注释可以忽略对此行的检查

var bad_name int //nolint:golint,unused

在代码块上注释忽略对代码块的检查

//nolint
func allIssuesInThisFunctionAreExcluded() *string {
  // ...
}
 
//nolint:govet
var (
  a int
  b int
)

package生命上注释忽略对此文件的检查

//nolint:unparam
package pkg
...

使用技巧

  1. 第一次检查的时候,按照目录检查,以减轻修改压力。
  2. 按文件修改,减少文件切换次数。利用grep命令过滤出文件
golangci-lint run ./...|grep pkg/storage/redis_cluster.go
  1. 在实际代码中因为变量命令可读性的问题,默认的80长度可能太小,可以把linters-setting.lll.line-length设置更大一些。
  2. 每次修改完代码都要进行一下检查。
  3. 在根目录下放置一个通用的golangcli-lint配置文件。