面试题答案
一键面试在Go语言中,可以通过在defer
函数中使用recover
来捕获panic
,从而防止服务崩溃。以下是关键代码示例:
package main
import (
"log"
)
// 模拟一个可能发生严重错误的函数
func criticalFunction() {
// 模拟数据库连接丢失且无法重试的错误
panic("数据库连接丢失且无法重试")
}
// 调用可能发生严重错误的函数,并处理错误
func safeCall() {
defer func() {
if r := recover(); r != nil {
// 记录错误信息
log.Printf("捕获到严重错误: %v", r)
// 进行相应处理,例如通知监控系统等
}
}()
criticalFunction()
}
func main() {
safeCall()
// 服务继续运行
log.Println("服务继续正常运行")
}
在上述代码中:
criticalFunction
函数模拟了可能出现严重错误并触发panic
的情况。safeCall
函数通过defer
和recover
来捕获panic
,避免服务崩溃。在recover
捕获到错误后,记录错误信息并可以进行相应的后续处理。main
函数调用safeCall
,在捕获并处理错误后,服务可以继续正常运行。