实际代码中为了方便,写了如下的代码:
func Recover(ctx context.Context) { if e := recover(); e != nil { Log.Errorf(ctx, "[PANIC]e: %v\n stack:%v\n", e, GetStack()) } }
在一般使用过程中,可以如下使用:
func test1(ctx context.context){
defer Recover(ctx)
// logic
}
但是实际使用过程中,产生了一种错误使用:
func test1(ctx context.context){
defer func(){
Recover(ctx)
}()
// logic
}
如果在defer 方法中再调用recovery包装方法,则是无法恢复panic现场的。这点需要注意