ZBLOG

在go语言中使用recover捕捉协程panic

在 Go 中,可以使用 recover() 函数来捕捉协程中的 panic。recover() 必须在 defer 函数中调用。

以下是一个示例程序,演示了如何在协程中使用 recover() 来捕捉 panic:

package main

import (
    "fmt"
)

func main() {
    go func() {
        defer func() {
            if r := recover(); r != nil {
                fmt.Println("Recovered from panic:", r)
            }
        }()
        
        // 调用会导致 panic 的函数
        panic("oops")
    }()

    // 让主 goroutine 等待一段时间以便观察输出结果
    // 这里为了简化代码,使用了 Sleep 函数
    // 实际使用时应该使用 sync.WaitGroup 等方式进行等待
    time.Sleep(time.Second)
}

在上面的示例程序中,我们在协程中调用了一个会导致 panic 的函数,然后在 defer 函数中使用 recover() 捕捉了这个 panic,并打印出了错误信息。

需要注意的是,recover() 只能在 defer 函数中使用,而且只有在发生 panic 时才会返回值。如果没有 panic,recover() 会返回 nil。此外,如果在非协程函数中使用 recover(),也不会起作用。

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?