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