让我们假设以下代码:
func main() {
doStuff()
}
听起来不错,直到你的程序运行没有任何错误但什么也没做,因为你忘了doStuff()
实际上是这样的:
func doStuff() error {
// ...
return errors.New("woops!")
}
我们应该做什么:
func main() {
err := doStuff()
if err != nil {
panic(err)
}
}
或者至少(显而易见):
func main() {
_ = doStuff()
}
那里有很多去工具。有没有一种简单的方法来检查我的代码是否处理了错误返回值?
答案 0 :(得分:3)
正如@eugecm建议的那样,github.com / kisielk / errcheck会这样做,github.com / goASTScanner / gas也是如此。此外,github.com/alecthomas/gometalinter可以轻松下载一组linters并并行运行它们,并包含上述两种内容。
所以,
go get github.com/alecthomas/gometalinter
gometalinter --install
gometalinter
将下载gometalinter,然后安装一些错误和样式检查程序并并行运行它们,报告结果。
您示例的相关结果如下:
main.go:13::warning: Errors unhandled.,LOW,HIGH (gas)
main.go:13::warning: error return value not checked (doStuff()) (errcheck)
我推荐使用gometalinter,因为它给出了如上所述的结果,其中在一个裸命令上运行errcheck只是说main.go:13:10 doStuff()
(因为errcheck是一个仅检查未经检查的错误返回值的程序,因此,没有必要提供其他信息。)