我正在使用一个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
而不是错误。这是预期的行为吗?
答案 0 :(得分:3)
recover
必须由延迟函数直接调用。
如果满足以下任何条件,则恢复的返回值为零 成立:
- 恐慌的论点是nil;
- goroutine并不恐慌;
- 恢复不是由延迟函数直接调用的。