正确处理错误

user6467981:

通常,在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
}

与代码相比,样板错误处理的行更多!该网站表示要避免这种情况,但没有提供如何清除这种气味的示例。Go博客直接提供了一个有用的示例,该示例向我们展示了如何使用有意义的错误处理程序清理同类HTTP应用程序。

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

有没有一种方法可以消除在错误方面不能很好地“啮合”的函数来消除这种类型的代码味道?

Ammar Bandukwala:

不幸的是,有时无法绕开这些模式。可以将panic / defer用作临时的try / catch系统,但社区对此视而不见。

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

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

可以变成

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章