正确处理错误

时间:2017-03-15 21:08:42

标签: go error-handling

通常在Go中,您会找到以下约定:

res, err := thingThatCanError(arg)

if err != nil {
        // handle it
}

然而,显而易见的是,对于大量这些电话来说,这非常难以接受:

res, err := thingThatCanError(arg)

if err != nil {
        // handle it
}

res, err2 := thingThatCanError(arg)

if err2 != nil {
        // handle it
}

res, err3 := thingThatCanError(arg)

if err3 != nil {
        // handle it
}

与代码相比,样板错误处理更多! This website避免这个,但没有举例说明如何清理这种气味。一个有用的例子来自Go blog,它向我们展示了如何使用有意义的错误处理程序清理同质HTTP应用程序。

但是想象一下这些调用中的每一个都不是同质的,就像使用相同的“中心思想”一样,所以单个“错误处理程序结构”就没有多大意义。

有没有一种方法可以清除这种类型的代码气味,而这些功能在错误方面没有“很好地融合在一起”?

1 个答案:

答案 0 :(得分:1)

不幸的是,这些模式有时无法解决。您可以使用恐慌/延迟作为临时尝试/捕获系统,但社区会瞧不起它。

如果Go中的语句可以与赋值组合,那么

err := thing.Do()
if err != nil {
   return err
}

可以成为

if err := thing.Do(); err != nil {
   return err
}