vet 是 golang 中自带的静态分析工具,可以让我们检查出 package 或者源码文件中一些隐含的错误。
这个工具还是比较有用的,可以多研究下
go vet main.go
//Printf中的格式错了%d,写出了%s
//./main.go:11:5: Printf format %d has arg str of wrong type string
go vet main.go main2.go main3.go ...
//分析多个文件
go vet testv2/*.go
//分析某个包下的所有go
go vet floder/...
//分析某个包下的所有文件
go install golang.org/x/tools/go/analysis/passes/shadow/cmd/shadow
go vet -vettool=$(which shadow)
//除了下面可用的分析器,还可以用第三方的分析器,执行命令如上
go doc cmd/vet
//查看vet命令帮助
go tool vet help
//也是查看vet的帮助,二者有些不一样,可以对照着看
go vet
//默认执行所有的分析器(下面有)
go vet -printf=true main.go
//go vet -分析器名称=true main.go
//printf是一种分析器,为true 意思是只使用这一种分析器,其他分析器都不使用
//为false,则说明,不使用rintf分析器,其他分析器都使用
go vet -c=10 main.go
//c 显示有问题的上下10行
go vet -json main.go
//以json格式输出
所有可用的分析器
-all 进行全部检查。如果有其他检查标记被设置,则命令程序会将此值变为false。默认值为true。
-asmdecl 对汇编语言的源码文件进行检查。默认值为false。
-assign 检查赋值语句。默认值为false。
-atomic 检查代码中对代码包sync/atomic的使用是否正确。默认值为false。
-buildtags 检查编译标签的有效性。默认值为false。
-composites 检查复合结构实例的初始化代码。默认值为false。
-compositeWhiteList 是否使用复合结构检查的白名单。仅供测试使用。默认值为true。
-methods 检查那些拥有标准命名的方法的签名。默认值为false。
-printf 检查代码中对打印函数的使用是否正确。默认值为false。
-printfuncs 需要检查的代码中使用的打印函数的名称的列表,多个函数名称之间用英文半角逗号分隔。默认值为空字符串。
-rangeloops 检查代码中对在```range```语句块中迭代赋值的变量的使用是否正确。默认值为false。
-structtags 检查结构体类型的字段的标签的格式是否标准。默认值为false。
-unreachable 查找并报告不可到达的代码。默认值为false。