如何对整个项目(包括内部包)运行“go vet”?

Jon*_*art 8 go

我想运行go vet我的整个 Go 项目。该项目遵循标准 Go 项目布局,并具有许多“内部”包。

project
|- go.mod
|- main.go
|- internal
|  |- package1
|  |- foo/pack
|  |- bar/pack
|- vendor
   |- github.com
      |- foo
         | bar
Run Code Online (Sandbox Code Playgroud)

如何运行go vet所有代码?理想情况下,这只是我的代码并排除vendor目录。

这是不起作用的:

  • go vet- 仅涵盖顶层main.go

Jon*_*art 14

与许多命令一样,针对go vet列表运行。可以通过多种方式列出包。看。go help packages

该命令将执行我们想要的操作:

go vet ./...
Run Code Online (Sandbox Code Playgroud)

您可以使用以下命令来确认正在审查的软件包列表go list

go list ./...
Run Code Online (Sandbox Code Playgroud)

具体来说,它利用了这些语法技巧:

  • 作为根路径或以...元素开头的导入路径被解释为文件系统路径并表示该目录中的包。

  • 如果导入路径包含一个或多个...通配符,则它是一种模式,每个通配符可以匹配任何字符串,包括空字符串和包含斜杠的字符串。

  • ./..../vendor与 或 的子目录中的包不匹配./mycode/vendor