Go 调用函数是否会中断recover()?

Go 调用函数是否会中断recover()?,go,Go,我使用了一个库,它可以从恐慌中恢复()s,它使用的代码可以简化为以下内容: func main() { defer rec() panic("X") } func rec() { rec2() } func rec2() { fmt.Printf("recovered: %v\n", recover()) } 其输出为: recovered: <nil> panic: X ... more panic output ... 已恢复: 恐慌:X

我使用了一个库,它可以从恐慌中恢复()s,它使用的代码可以简化为以下内容:

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

func rec() {
    rec2()
}

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

recovered: <nil>
panic: X
... more panic output ...
已恢复:
恐慌:X
... 更多的恐慌输出。。。

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

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

从:

如果满足以下任一条件,则recover的返回值为零 持有:

  • 恐慌的论据是零
  • 戈罗廷并没有惊慌失措
  • 延迟函数未直接调用recover

但是没有从延迟函数调用recover()(rec在main中延迟)?我相信你,我只是不太明白:)@william.taylor.09:不,这里的延迟函数是
rec
,而
rec
只是直接调用
rec2
rec2
是调用
recover()
的程序。将延迟更改为
rec2()
会引起恐慌。