恢復
顧名思義,可以嘗試從 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