package main
import (
"fmt"
"time"
)
func riskyFunction() {
// 假设这里是有风险的代码,可能会引起panic
panic("出现了一个严重错误")
}
func recoverFromPanic() {
// 使用defer和recover来从panic中恢复
defer func() {
if r := recover(); r != nil {
fmt.Println("恢复过程中:", r)
// 在这里可以进行错误处理,如记录日志等
}
}()
// 在这里调用可能会引起panic的函数
riskyFunction()
}
func main() {
// 每隔一秒尝试从panic中恢复
for {
recoverFromPanic()
time.Sleep(1 * time.Second)
}
}
这段代码演示了如何使用defer
和recover
来从panic
中恢复。recoverFromPanic
函数中的defer
语句确保了无论在riskyFunction
函数中发生什么,程序都能够从panic中恢复。在main
函数中,循环确保了这个恢复过程会持续进行。