func someFunc() (err error) {
defer func(err_ error) {
r.handleErrOrPanic(err_, obj)
}(err) // err is always nil here
err = ThrowErrOrPanic(ctx, obj)
return err
}
我想使用handleErrOrPanic
作为延迟函数来处理错误或死机。我必须在ThrowErrOrPanic
之前定义它,因为deferred函数必须处理panic。但是,如果我在err
之前定义它,它总是nil。我该怎么解决这个问题?
1条答案
按热度按时间m3eecexj1#
在deferred函数中,使用周围函数的 named return value,即使用
err
而不是err_
。如果你遇到了panic,并且你想从它中恢复,在deferred函数中使用recover()
。https://go.dev/play/p/miTr-lN1Y9R