ZBLOG

如果要捕获panic呢

如果要捕获 panic,可以使用 defer 和 recover 函数。在 runGoroutine 函数中,我们可以使用 defer 语句来调用一个匿名函数,在该匿名函数中使用 recover 函数来捕获可能发生的 panic。

下面是修改后的代码:

func runGoroutine(f func()) {
    maxRetry := 3
    go func() {
        for i := 0; i < maxRetry; i++ {
            defer func() {
                if r := recover(); r != nil {
                    fmt.Printf("Panic: %v\n", r)
                }
            }()
            f()
        }
    }()
}

在上面的代码中,我们将 defer 语句移到了循环内部,并将其包裹在一个匿名函数中。然后,在该匿名函数中,我们使用 recover 函数来捕获可能发生的 panic。如果程序出现 panic,则会打印错误信息并继续执行下一次循环。如果没有出现 panic,则会正常退出循环。

需要注意的是,defer 语句在当前函数返回之前执行,因此如果 f 函数本身就会抛出 panic,则无法通过 defer 和 recover 来捕获这个错误。因此,在编写 f 函数时应该尽可能避免出现 panic 的情况。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=5726

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?