Recover捕获异常

本文讨论了在编程中如何处理panic异常,提倡不直接回复其他包引起的panic,而是将其视为普通错误并提供额外信息。特别提到net/http包中的web服务器处理方式,强调有选择性地使用recover以避免全局影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有时候我们可以需要从panic中恢复

下面这个函数中,如果某个异常出现,我们不会选择让解析器崩溃,而是将panic异常当作普通的解析错误,并附加额外消息提醒用户报告此错误

func Parse(input string) (s *Syntax, err error) {
    defer func() {
        if p := recover(); p != nil {
            err = fmt.Errorf("internal error: %v", p)
        }
    }()
    // ...parser...
}

我们观察上面的defer函数,p是recover的错误信息,我们将panic value添加到了err中

在panic后面,我们无法保证包级变量的状态仍然和我们预期一致。

我们遵守的规范是:不应该试图去回复其他包引起的panic,公用的API应该及那个函数的运行失败作为error返回

我们很难完全遵守规范,在net/http包中提供的web服务器,我们不应该因为一个handler函数的问题而终止整个gorouitne,这里我们需要使用recover

我们需要有选择性的recover

为了标识某个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值