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中文网其他相关文章!