登录
首页 >  Golang >  Go教程

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

时间:2024-12-10 09:36:56 382浏览 收藏

golang学习网今天将给大家带来《如何利用ErrorGroup捕获子协程Panic并通知主协程?》,感兴趣的朋友请继续看下去吧!以下内容将会涉及到等等知识点,如果你是正在学习Golang或者已经是大佬级别了,都非常欢迎也希望大家都能给我建议评论哈~希望能帮助到大家!

如何利用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并通知主协程?》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>