通常,在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应用程序。
但是,可以想象这些调用中的每个调用都不一样,就像在相同的“中心思想”中那样,因此,单个“错误处理程序结构”就没有多大意义。
有没有一种方法可以消除在错误方面不能很好地“啮合”的函数来消除这种类型的代码味道?
不幸的是,有时无法绕开这些模式。您可以将panic / defer用作临时的try / catch系统,但社区对此视而不见。
如果Go中的语句可以与赋值结合使用,那么
err := thing.Do()
if err != nil {
return err
}
可以变成
if err := thing.Do(); err != nil {
return err
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句