Go——优雅地处理多个错误?

标签 go

有没有办法清理这个 (IMO) 看起来很可怕的代码?

    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

关于Go——优雅地处理多个错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15397419/

相关文章:

go - 在 Go 中将 Blob 转换为图像

go - 将类型变量传递给函数

google-app-engine - 如何在 golang gorilla 框架中设置 session 变量?

string - 我应该使用%s还是%v格式化错误

python - 外部函数 : who deallocates memory?

go - 在 Mac OSX 中安装 Delve for GO

go - 具有相似元素类型的 slice 之间的转换

ubuntu - 无法在 Linux 上使用 alexbrainman/odbc 连接到 Go 中的第 3 方 ODBC 驱动程序

go - 将一个模板渲染到另一个模板中,而无需每次都解析它们

go - 在两个单独的 goroutine 中比较两个 slice 并使用 sync.Waitgroup 时挂起 goroutines