如何从 panic 中恢复 ?
在 Go 语言中,你可以使用 recover
函数来从 panic
中恢复。recover
使程序从恐慌状态(panic)中恢复并重新获得流程控制权。
基本的使用方法如下:
func f() {
defer func() {
if r := recover(); r != nil {
fmt.Println("Recovered from", r)
}
}()
fmt.Println("About to panic")
panic("some reason")
fmt.Println("This line will not be executed")
}
func main() {
f()
fmt.Println("Returned normally from f.")
}
在这个例子中,f
函数中的 defer
语句包含了一个匿名函数。在这个匿名函数中,我们调用了 recover
函数。如果 panic
发生,recover
函数会捕获 panic
的值,并且让程序从 panic
状态中恢复过来,然后程序会继续执行 defer 后面的语句。在 recover
后面的代码中,我们可以添加一些处理逻辑,比如错误日志的记录等。
注意:
recover
必须在defer
函数中执行,才能捕获到panic
异常。如果不在defer
函数中调用,当panic
发生后,recover
将无法捕获到panic
,程序将会异常退出。- 如果在
defer
函数中有多个recover
,只有最后一个可以捕获panic
。
以上就是在 Go 语言中如何从 panic
中恢复。