Golang 第五章 10.recover
recover 是 Go 中 从 panic 中恢复 的内置函数。
只能在 defer 函数中调用
返回值为 panic 传递的值
如果没有 panic,返回 nil
基本示例
func f() {
defer func() {
r := recover() // 捕获 panic
if r != nil {
fmt.Println("捕获到 panic:", r)
}
}()
panic("发生错误")
}
func main() {
f()
fmt.Println("程序继续执行")
}输出:
捕获到 panic: 发生错误
程序继续执行panic 被 recover 捕获
程序不会崩溃
defer 保证资源清理
注意事项
recover 仅在 defer 中有效
必须先 defer 才能 recover
recover 返回 panic 的值
如果没有 panic,recover 返回 nil
实战示例:安全调用函数
func safeCall(f func()) {
defer func() {
if r := recover(); r != nil {
fmt.Println("函数执行时发生 panic:", r)
}
}()
f() // 调用可能 panic 的函数
}
func main() {
safeCall(func() {
panic("意外错误")
})
fmt.Println("程序继续运行")
}输出:
函数执行时发生 panic: 意外错误
程序继续运行使用 recover 包裹函数调用
可捕获错误并继续程序执行
常用于服务器或后台任务,提高稳定性
recover 使用场景
保护服务器请求处理函数
防止 goroutine 崩溃
处理不可预测的 runtime 错误
v2ray节点购买


评论