亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Go——優雅地處理多個錯誤?

Go——優雅地處理多個錯誤?

Go
慕森王 2021-06-01 17:28:01
有沒有辦法清理這個(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} 具體來說,我說的是錯誤處理。能夠一次性處理所有錯誤會很好。
查看完整描述

3 回答

?
慕尼黑8549860

TA貢獻1818條經驗 獲得超11個贊

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


查看完整回答
反對 回復 2021-06-07
?
烙印99

TA貢獻1829條經驗 獲得超13個贊

將結果放在切片中而不是變量中,將初始值放在另一個切片中進行迭代,如果出現錯誤則在迭代過程中返回。


var result [][]byte

for _, item := range []interface{}{a, b, c, d, e, f, g} {

    res, err := json.Marshal(item)

    if err != nil {

        return err

    }

    result = append(result, res)

}

你甚至可以重用一個數組而不是兩個切片。


var values, err = [...]interface{}{a, b, c, d, e, f, g}, error(nil)

for i, item := range values {

    if values[i], err = json.Marshal(item); err != nil {

        return err

    }

}

當然,這需要類型斷言才能使用結果。


查看完整回答
反對 回復 2021-06-07
  • 3 回答
  • 0 關注
  • 235 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號