面试题答案
一键面试- 使用
panic
和recover
机制的思路:- 在业务逻辑中,如果遇到不可恢复的错误,如数据库连接失败、严重的数据格式错误等,使用
panic
抛出异常。 - 在最外层的请求处理函数中使用
recover
来捕获panic
,这样可以防止微服务崩溃。 - 捕获
panic
后,记录详细的错误信息,包括错误类型、错误发生的位置等,以便后续排查问题。
- 在业务逻辑中,如果遇到不可恢复的错误,如数据库连接失败、严重的数据格式错误等,使用
- 代码示例(以Go语言为例):
package main
import (
"fmt"
"log"
)
// 模拟数据库连接函数
func connectDB() error {
// 这里模拟连接失败,返回错误
return fmt.Errorf("数据库连接失败")
}
// 模拟业务处理函数,可能会触发panic
func processRequest() {
err := connectDB()
if err != nil {
panic(err)
}
// 其他业务逻辑
}
func main() {
defer func() {
if r := recover(); r != nil {
// 记录详细错误信息
log.Printf("捕获到panic: %v", r)
// 这里可以做更多的错误处理,比如发送错误报告等
}
}()
processRequest()
}
在上述代码中:
connectDB
函数模拟数据库连接,这里返回一个错误来模拟连接失败。processRequest
函数调用connectDB
,如果连接失败则触发panic
。- 在
main
函数中,使用defer
和recover
来捕获panic
,并通过log.Printf
记录详细的错误信息。这样即使processRequest
中触发了panic
,程序也不会崩溃,并且可以通过记录的错误信息来排查问题。