dtp87205
2016-04-19 20:07
浏览 24
已采纳

调用函数是否会破坏recover()?

I was using a library which recover()s from panics, and it was using code that simplifies to the following:

func main() {
    defer rec()
    panic("X")
}

func rec() {
    rec2()
}

func rec2() {
    fmt.Printf("recovered: %v
", recover())
}

The output of this is:

recovered: <nil>
panic: X
... more panic output ...

Notably, recover() returns nil instead of the error. Is this intended behavior?

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • dongzice4895 2016-04-19 20:18
    已采纳

    recover must be called directly by a deferred function.

    from the language spec:

    The return value of recover is nil if any of the following conditions holds:

    • panic's argument was nil;
    • the goroutine is not panicking;
    • recover was not called directly by a deferred function.
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题