面试题答案
一键面试- 代码整体架构:
- 在核心业务函数外层包裹一个函数,用于调用核心业务函数并进行
recover
操作。 - 核心业务函数处理具体的业务逻辑,可能会
panic
。 - 日志记录模块用于记录捕获到的错误信息。
- 错误响应模块返回通用的错误响应给调用方。
- 在核心业务函数外层包裹一个函数,用于调用核心业务函数并进行
- 关键实现步骤:
- 定义核心业务函数:编写实现具体业务逻辑的函数,在函数内部如果遇到如数据库连接异常、参数校验失败等情况,使用
panic
抛出异常。 - 定义外层包装函数:这个函数调用核心业务函数,并使用
defer
和recover
来捕获panic
。 - 日志记录:捕获到
panic
后,将错误信息记录到日志中。 - 返回通用错误响应:无论是否捕获到
panic
,都返回给调用方一个合适的响应,捕获到panic
时返回通用错误响应。
- 定义核心业务函数:编写实现具体业务逻辑的函数,在函数内部如果遇到如数据库连接异常、参数校验失败等情况,使用
- 核心代码示例:
package main
import (
"log"
)
// 核心业务函数,可能会panic
func coreBusinessFunction() {
// 模拟参数校验失败
var param string
if param == "" {
panic("参数校验失败")
}
// 模拟数据库连接异常
// 这里省略实际的数据库连接代码,直接panic
panic("数据库连接异常")
}
// 外层包装函数,处理panic并记录日志
func wrapperFunction() (string, error) {
defer func() {
if r := recover(); r != nil {
log.Printf("捕获到panic: %v", r)
}
}()
coreBusinessFunction()
return "正常响应", nil
}
func main() {
response, err := wrapperFunction()
if err != nil {
log.Println("返回错误响应")
response = "通用错误响应"
}
log.Println("返回给调用方的响应:", response)
}
在上述代码中:
coreBusinessFunction
是核心业务函数,模拟了参数校验失败和数据库连接异常时的panic
。wrapperFunction
通过defer
和recover
捕获panic
,并使用log.Printf
记录错误信息。main
函数调用wrapperFunction
,如果发生错误则返回通用错误响应。这样设计可以在不影响服务整体稳定性的前提下,快速恢复正常工作状态。