登录
首页 >  Golang >  Go问答

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

来源:stackoverflow

时间:2024-02-16 09:54:23 323浏览 收藏

今天golang学习网给大家带来了《在追加函数结果的同时如何覆盖错误》,其中涉及到的知识点包括等等,无论你是小白还是老手,都适合看一看哦~有好的建议也欢迎大家在评论留言,若是看完有所收获,也希望大家能多多点赞支持呀!一起加油学习~

问题内容

通常使用 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() // ?

正确答案


语言规范不支持对多个返回值进行不同的处理。

但是,使用辅助函数很容易做到这一点:

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)
}

这将输出 3(在 Go Playground 上尝试)。

如果您可以将错误处理移至辅助函数中,它也可以如下所示:

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 上试试这个。

查看相关:Multiple values in single-value context

理论要掌握,实操不能落!以上关于《在追加函数结果的同时如何覆盖错误》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>