有没有办法找到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)