美文网首页
golang panic&recover

golang panic&recover

作者: hehehehe | 来源:发表于2022-02-28 17:03 被阅读0次
触发panic
panic("crash")
捕获 panic
  • recover 的使用,有一个条件,就是它必须在 defer 函数中才能生效,其他作用域下,它是不工作的。
  • 即使 panic 会导致整个程序退出,但在退出前,若有 defer 延迟函数,还是得执行完 defer 。
  • defer 在多个协程之间是没有效果,在子协程里触发 panic,只能触发自己协程内的 defer,而不能调用 main 协程里的 defer 函数的。
import (
    "fmt"
    "time"
)

func main() {
    // 这个 defer 并不会执行
    defer fmt.Println("in main")

    go func() {
        defer println("in goroutine")
        panic("")
    }()

    time.Sleep(2 * time.Second)
}

失败时候拿到返回值
使用有参数返回

func (p *pool2) doWork(task Task) (res string) {
    defer func() {
        if err := recover(); err != nil {
            log.Println(err)
            res = "fail"
        }
    }()
    return task.worker(task.params...)
}

相关文章

网友评论

      本文标题:golang panic&recover

      本文链接:https://www.haomeiwen.com/subject/zqwlrrtx.html