Go 快速入门指南 - recover
概述
建议先阅读 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 个错误: 测试
*/
联系我
本作品采用《CC 协议》,转载必须注明作者和本文链接