vet 是 golang 中自带的静态分析工具,可以让我们检查出 package 或者源码文件中一些隐含的错误。
我们可以输入 go help vet 来了解一下它的简介,输入 go doc cmd/vet 可以查看详细一点的文档。
为什么使用 vet?
比如下面这段程序
package main
import "fmt"
func main() {
test()
}
func test() {
str := "Hello"
fmt.Printf("%d World", str)
}
这时候编译是可以通过的。但是很明显,我们在 %d 的位置是要打印一个字符串,应该用 %s,这时候如果用 vet 扫描一下就可以避免这个问题
分析某个文件
go vet floder/main.go
分析某个包
go vet floder/*.go
go vet floder/...
也可以分析多个包和多个文件,用空格隔开即可。
另外,go 还有很多质量工具,最常用的就是 goimports(来检测引用包的问题),gofmt(代码格式问题),golangci-lint(语法检测),还有一些其他第三方的质量检测工具,帮助我们完善代码:https://github.com/analysis-tools-dev/static-analysis#go
比如 bodyclose 这个包,可以用来检测 HTTP 响应主体是否关闭,使用方法:
go vet -vettool=$(which bodyclose) github.com/timakin/go_api/...