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

通常,result, err := func()使用。


当其中一个变量已经初始化时:


_, err := func()


var result string

result, 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()

// or

result, err +=, = func()

// or

result, err += = func()

// or

result, err (+=, =) func() // ?


喵喵时光机
浏览 103回答 1
1回答

长风秋雁

语言规范不支持对多个返回值进行不同处理。但是,使用辅助函数很容易做到这一点: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 intcheck := 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 inthandle := func(result int, err error) {    if err != nil {        panic(err)    }    all += result}handle(foo())handle(foo())handle(foo())fmt.Println(all)在Go Playground上试试这个。参见相关:单值上下文中的多个值
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go