恢复
顾名思义,可以尝试从 panic
中恢复。必须在延迟语句中尝试恢复,因为正常执行流已经停止。recover
语句必须直接出现在延迟函数框中。在延迟函数调用调用的函数中的恢复语句将不受支持。如果程序当前恐慌,recover()
调用将返回提供给初始恐慌的参数。如果该程序目前没有恐慌,recover()
将返回 nil
。
package main
import "fmt"
func foo() {
panic("bar")
}
func bar() {
defer func() {
if msg := recover(); msg != nil {
fmt.Printf("Recovered with message %s\n", msg)
}
}()
foo()
fmt.Println("Never gets executed")
}
func main() {
fmt.Println("Entering main")
bar()
fmt.Println("Exiting main the normal way")
}
输出:
Entering main
Recovered with message bar
Exiting main the normal way