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

有没有办法找到go代码中未处理的错误?,go,Go,让我们假设以下代码: func main() { doStuff() } 听起来不错,直到您的程序运行时没有任何错误,但什么也不做,因为您忘记了doStuff()实际上看起来像: func doStuff() error { // ... return errors.New("woops!") } 我们应该做的是: func main() { err := doStuff() if err != nil { panic(err)

让我们假设以下代码:

func main() {
    doStuff()
}
听起来不错,直到您的程序运行时没有任何错误,但什么也不做,因为您忘记了
doStuff()
实际上看起来像:

func doStuff() error {
    // ...
    return errors.New("woops!")
}
我们应该做的是:

func main() {
    err := doStuff()
    if err != nil {
        panic(err)
    }
}
或者至少(为了让事情变得明显):


外面有很多像这样的围棋工具。有没有一种简单的方法来检查我的代码是否有未处理的错误返回值?

正如@eugecm所建议的,github.com/kisielk/errcheck和github.com/goastcanner/gas都会这样做。此外,github.com/alecthomas/gometalinter使下载一组linter并并行运行变得非常容易,并且包含了以上两个方面

所以

将下载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是一个只检查未检查的错误返回值的程序,所以不需要额外的信息)。

您尝试过
errcheck
?你说你知道有很多工具可以对Go代码进行静态代码检查,但没有说明为什么你已经知道的这些工具是一个合适的解决方案。。。有没有什么特别的东西你还没有找到?不推荐使用。
go get github.com/alecthomas/gometalinter
gometalinter --install
gometalinter
main.go:13::warning: Errors unhandled.,LOW,HIGH (gas)
main.go:13::warning: error return value not checked (doStuff()) (errcheck)