如何利用ErrorGroup捕获子协程Panic并通知主协程?

2024-11-08 19:36:35 编辑:抖狐科技 来源:摘自互联网

如何利用errorgroup捕获子协程panic并通知主协程?

errorgroup处理子协程panic通知主协程

errorgroup可以捕获子协程返回的错误,但当子协程发生panic时,主协程无法得知错误信息。这是因为:

  • 子协程中使用defer recover()防止程序终止,但无法返回错误。
  • 主协程通过errgroup.wait()获取的错误为nil。

为了解决这个问题,可以在defer中修改命名返回值:

package main

import (
    "errors"
    "fmt"
)

func test(num int) (err error) {
    defer func() {
        if x := recover(); x != nil {
            err = errors.new(fmt.sprintf("test defer: %s", x))
        }
    }()

    if num == 1 {
        panic("test panic")
    }
    return
}

func main() {
    fmt.println(test(0))
    fmt.println(test(1))
}

登录后复制

这样,主协程可以通过errgroup.wait()获得子协程中的panic信息:

<nil>
test defer: test panic

登录后复制

以上就是如何利用ErrorGroup捕获子协程Panic并通知主协程?的详细内容,更多请关注抖狐科技其它相关文章!

本站文章均为抖狐网站建设摘自权威资料,书籍,或网络原创文章,如有版权纠纷或者违规问题,请即刻联系我们删除,我们欢迎您分享,引用和转载,我们谢绝直接复制和抄袭!感谢...