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。