为了账号安全,请及时绑定邮箱和手机立即绑定

如何在覆盖错误的同时附加函数结果?

如何在覆盖错误的同时附加函数结果?

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 关注
  • 102 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号