panic()
或 recover()
的 defer
和 go
语句。
此类语句很少有用,可能意味着误用了 panic()
和 recover()
机制。
应特别注意以下事项:
go panic()
:一个新启动的 goroutine 会立即 panic。defer panic()
:带有这个语句的函数在退出时总是会 panic。go recovery()
: 没有效果,因为新启动的 goroutine 不能 panic。defer recovery()
: 带有这个语句的函数将默默地停止 panic。 这种用法可能有效,但一种惯用的方法是检查 recover()
返回的值:
defer func() {
if r := recover(); r != nil {
fmt.Println("Recovered from: ", r)
}
}()
有关 go 语句和 panic 处理的更多信息,请参阅 Go 语言规范中的 Handling panics 和 Go statements 页面。