概述
倡议先浏览 defer 大节。
recover
会终止 panic
状态并且返回 panic
的值,函数会从 panic
之前执行到的中央间接返回,不会持续往下执行。
语法规定
**recover
和 defer
必须配套应用, 如果 recover
在其余中央执行会返回 nil
,不会产生任何成果。defer
必须在 panic
之前申明,否则 panic
会间接终止程序。**
例子
谬误捕捉
package mainimport "fmt"func main() { if r := recover(); r != nil { fmt.Printf("捕捉到 1 个谬误: %v\n", r) } panic("测试") println("程序执行不到这里")}// $ go run main.go// 输入如下 /** panic: 测试 ... ... exit status 2*/
正确捕捉
package mainimport "fmt"func main() { defer func() { if r := recover(); r != nil { fmt.Printf("捕捉到 1 个谬误: %v\n", r) } }() panic("测试") println("程序执行不到这里")}// $ go run main.go// 输入如下 /** 捕捉到 1 个谬误: 测试*/