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并通知主协程?的详细内容,更多请关注抖狐科技其它相关文章!
本站文章均为抖狐网站建设摘自权威资料,书籍,或网络原创文章,如有版权纠纷或者违规问题,请即刻联系我们删除,我们欢迎您分享,引用和转载,我们谢绝直接复制和抄袭!感谢...
我们猜你喜欢
-
win10提示2xlive.dll文件丢失怎么解决
win10提示2xlive.dll文件丢失,如何解决?使用电脑玩游戏时,看到系统提示“无法启动此程序,因为计算机中丢失xlive.dll”让人很苦恼。这个提示表明游戏所需的关键文件缺失或未注册。php...
-
C++ 函数扩展能力的限制
c++++ 函数扩展能力限制为:内存管理:无法在函数内分配或释放局部变量的内存。类型擦除:无法返回多态类型或构建通用函数。参数数量:普通参数数量有限,最多为 255 个。C++ 函数扩展能力的限制 在...
-
台式win7怎么升级
台式机 windows 7 可通过以下方式升级:使用 windows 10/11 安装媒体直接升级通过 windows update 进行升级台式机 Windows 7 如何升级 直接升级 对于运行...
-
bing如何切换国际版
可以通过访问 bing 国际版网站、更改语言和区域设置以及保存更改来切换到国际版 bing。步骤包括:1. 访问 bing 国际版网站;2. 更改语言和区域设置;3. 保存更改。常见问题解答:q1....
-
镇魂街破晓黑尔坎普boss怎么打 镇魂街破晓黑尔坎普boss打法攻略
在镇魂街破晓中,黑尔坎普是一个令人畏惧的boss,让许多玩家望而生畏。如果你正在寻找击败黑尔坎普的策略,那么请继续阅读。php小编苹果将在本攻略中为你提供详细的打法指南,包括阵容选择和战斗技巧,帮助你...