首页 > 后端开发 > Golang > 如何优雅地处理 Go 中的多个错误?

如何优雅地处理 Go 中的多个错误?

DDD
发布: 2024-11-29 21:09:15
原创
961 人浏览过

How to Gracefully Handle Multiple Errors in Go?

在 Go 中优雅地处理多个错误

在 Go 中,以干净简洁的方式处理多个错误可能是一个挑战。考虑以下代码片段:

aJson, err1 := json.Marshal(a)
bJson, err2 := json.Marshal(b)
cJson, err3 := json.Marshal(c)
dJson, err4 := json.Marshal(d)
eJson, err5 := json.Marshal(e)
fJson, err6 := json.Marshal(f)
gJson, err4 := json.Marshal(g)

if err1 != nil {
    return err1
} else if err2 != nil {
    return err2
} else if err3 != nil {
    return err3
} else if err4 != nil {
    return err4
} else if err5 != nil {
    return err5
} else if err5 != nil {
    return err5
} else if err6 != nil {
    return err6
}
登录后复制

此代码有几个问题。首先,它使用多个 if 语句来单独处理每个错误。这使得代码冗长且难以阅读。其次,它返回遇到的第一个错误,这可能不是最重要或最相关的错误。

Go 中有一种更好的方法使用函数闭包来处理多个错误。下面是使用函数闭包的代码修订版本:

var err error
f := func(dest *D, src S) bool {
    *dest, err = json.Marshal(src)
    return err == nil
}

f(&aJson, a) &&
    f(&bJson, b) &&
    f(&cJson, c) &&
    f(&dJson, d) &&
    f(&eJson, e) &&
    f(&fJson, f) &&
    f(&gJson, g)

return err
登录后复制

此代码定义了一个函数闭包 (f),它采用两个参数:指向目标变量的指针和源值。闭包尝试将源值编组到目标变量中,如果不成功则设置错误。

然后为每个源值调用函数闭包,并使用 && 运算符组合结果。如果任何函数闭包返回错误,则整体 err 变量将被相应设置。否则,err 变量将为 nil。

这段代码比原始代码更干净、更简洁。它还可以一次性处理所有错误,从而更容易识别最重要的错误。

以上是如何优雅地处理 Go 中的多个错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板