我使用的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] 删除。
我来说两句