登录
首页 >  Golang >  Go问答

go语言使用errorgroup当子协程发生panic怎么通知主协程?

来源:SegmentFault

时间:2023-02-17 16:22:00 157浏览 收藏

知识点掌握了,还需要不断练习才能熟练运用。下面golang学习网给大家带来一个Golang开发实战,手把手教大家学习《go语言使用errorgroup当子协程发生panic怎么通知主协程?》,在实现功能的过程中也带大家重新温习相关知识点,温故而知新,回头看看说不定又有不一样的感悟!

问题内容

errorgroup主协程能通过

err := errorGroup.Wait()
能够对于子协程中return出的error进行捕获。

当子协程发生panic时,子协程的defer使用recover防止程序终止,但是defer函数又无法return一个error,主协程的

err := errorGroup.Wait()
err为nil。

子协程该怎么告知主协程,使得主协程能够捕获到子协程的panic信息?

正确答案

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

$ go run ./hello.go 

test defer: test panic

文中关于golang的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《go语言使用errorgroup当子协程发生panic怎么通知主协程?》文章吧,也可关注golang学习网公众号了解相关技术文章。

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