有没有办法在go代码中找到未处理的错误?

时间:2017-05-10 16:26:57

标签: go

让我们假设以下代码:

func main() {
    doStuff()
}

听起来不错,直到你的程序运行没有任何错误但什么也没做,因为你忘了doStuff()实际上是这样的:

func doStuff() error {
    // ...
    return errors.New("woops!")
}

我们应该做什么:

func main() {
    err := doStuff()
    if err != nil {
        panic(err)
    }
}

或者至少(显而易见):

func main() {
    _ = doStuff()
}

那里有很多去工具。有没有一种简单的方法来检查我的代码是否处理了错误返回值?

1 个答案:

答案 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是一个检查未经检查的错误返回值的程序,因此,没有必要提供其他信息。)