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

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

如何在覆蓋錯誤的同時附加函數結果?

如何在覆蓋錯誤的同時附加函數結果?

Go
喵喵時光機 2022-10-10 19:38:58
通常,result, err := func()使用。當其中一個變量已經初始化時:_, err := func()var result stringresult, err = func()正在做:result, err = func()all_results += result // seems redundant and unneeded您如何將結果附加到其中一個(結果),并重置另一個?// along the lines of this:var result slice// for loop {result, _ += func() // combine this line_, err = func() // with this line你可以做:result +=, err = func()// orresult, err +=, = func()// orresult, err += = func()// orresult, err (+=, =) func() // ?
查看完整描述

1 回答

?
長風秋雁

TA貢獻1757條經驗 獲得超7個贊

語言規范不支持對多個返回值進行不同處理。


但是,使用輔助函數很容易做到這一點:


func foo() (int, error) {

    return 1, nil

}


func main() {

    var all int


    add := func(result int, err error) error {

        all += result

        return err

    }


    if err := add(foo()); err != nil {

        panic(err)

    }

    if err := add(foo()); err != nil {

        panic(err)

    }

    if err := add(foo()); err != nil {

        panic(err)

    }

    fmt.Println(all)

}

這將輸出(在Go Playground3上嘗試)。


如果您可以將錯誤處理移動到輔助函數中,它也可以如下所示:


var all int


check := func(result int, err error) int {

    if err != nil {

        panic(err)

    }

    return result

}


all += check(foo())

all += check(foo())

all += check(foo())


fmt.Println(all)

這輸出相同,在Go Playground上試試這個。

另一個變體可以是在輔助函數中做所有事情:


var all int


handle := func(result int, err error) {

    if err != nil {

        panic(err)

    }

    all += result

}


handle(foo())

handle(foo())

handle(foo())


fmt.Println(all)

在Go Playground上試試這個。

參見相關:單值上下文中的多個值


查看完整回答
反對 回復 2022-10-10
  • 1 回答
  • 0 關注
  • 92 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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