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

李三山:

我使用的recover()是来自恐慌的库,并且使用的代码可简化为以下内容:

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

func rec() {
    rec2()
}

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

输出为:

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

值得注意的是,recover()返回nil而不是错误。这是预期的行为吗?

吉姆:

recover 必须由延迟函数直接调用。

根据语言规范

如果满足以下任一条件,则recovery的返回值为nil:

  • 恐慌的论点为零。
  • goroutine不会惊慌;
  • 延迟函数未直接调用recovery。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如果未调用setRetainInstance(true),是否会破坏片段?

不确定函数是否会破坏反向传播

为什么在函数 B 中调用函数 A 而不是在函数 C 中调用函数 B 会破坏 go 运行时

Ajax调用php函数会破坏所有javascript函数和页面

调用方法并直接读取/设置参数的私有字段是否会破坏封装?

在“代码隐藏”事件中调用View Model方法是否会破坏MVVM?

使用常规强制转换会破坏内存?函数调用错误

即使未明确构造函数调用,它也会破坏返回对象?C ++

向函数添加具有默认值的参数是否会破坏ABI?

调用外部函数是否会强制从内存加载?

在 Python 中是否会多次调用 for 循环声明中的函数?

python:ctypes,argtypes是否会自动调用构造函数?

Java是否会自动调用抽象类的构造函数?

内置函数是否会添加到调用堆栈中?

是否会自动调用基类的构造函数?

重载括号()是否会影响构造函数调用?

调用创建对象的函数是否会导致内存泄漏?

C ++原子:函数调用是否会充当内存屏障?

调用解构函数时,这是否会导致内存泄漏?

在Enumerable上调用.ToArray会破坏Enumerable

SKNode上的removeFromParent是否会破坏实例?

中断sed是否会破坏目标文件?

iOS是否会破坏旋转视图?

在调用析构函数之前,是否有任何实际原因要检查某些事物是否可破坏?

从noexcept函数参数的构造函数引发的异常是否会立即导致对std :: terminate()的调用?

共享指针会破坏尾部调用优化吗?

MongoDB 中失败的更新调用会破坏原始文档吗?

为什么从接口调用 Dao 会破坏对 ViewModel 的观察?

在 do while 循环中调用 scanf 会破坏循环