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

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

DDD
DDD原创
2024-12-01 21:22:11675浏览

How Can I Eleganly Handle Multiple Errors in Go's JSON Marshaling?

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
} 

此代码具有广泛的错误检查功能,但其处理方法很笨拙。有没有更优雅的方法来管理这些错误?

幸运的是,有。通过利用闭包和共享错误变量的强大功能,我们可以实现简洁的错误处理:

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

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

在这个更新的代码中,我们定义了一个闭包 f 来处理给定源的 JSON 编组和错误检查和目的地。通过使用 && 运算符链接这些调用,我们可以连续执行它们,并且遇到的第一个错误将被捕获在共享 err 变量中。这使我们能够一次处理所有错误,显着提高代码的可读性和可维护性。

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn