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.
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败
  • ¥15 MapReduce实现倒排索引失败
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码
  • ¥50 随机森林与房贷信用风险模型