Go 调用函数是否会中断recover()?
我使用了一个库,它可以从恐慌中恢复()s,它使用的代码可以简化为以下内容: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
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()
会引起恐慌。