Go 如何知道延迟函数是在成功执行该函数后调用的,或者是由死机调用的

Go 如何知道延迟函数是在成功执行该函数后调用的,或者是由死机调用的,go,deferred,panic,Go,Deferred,Panic,我需要在defer函数中编写一些业务逻辑。延迟中的控制流应基于延迟是在系统崩溃后执行还是在成功执行功能后执行 主程序包 导入“日志” func b(){ 恐慌(“b中的恐慌”) } func a(){ b() } func main(){ 延迟函数(){ //如果惊慌失措 log.Println(“惊慌失措”) //如果在函数成功执行后调用 log.Println(“成功”) /* 如何理解延迟是由死机触发还是在函数成功返回后触发。 */ }() () log.Println(“主代码”) }

我需要在defer函数中编写一些业务逻辑。延迟中的控制流应基于延迟是在系统崩溃后执行还是在成功执行功能后执行

主程序包
导入“日志”
func b(){
恐慌(“b中的恐慌”)
}
func a(){
b()
}
func main(){
延迟函数(){
//如果惊慌失措
log.Println(“惊慌失措”)
//如果在函数成功执行后调用
log.Println(“成功”)
/* 
如何理解延迟是由死机触发还是在函数成功返回后触发。
*/
}()
()
log.Println(“主代码”)
}

预期:延迟应该能够通过任何可能的方式知道其被恐慌调用

您可以使用
恢复
捕捉恐慌:

defer func() {
    if err := recover(); err != nil {
        fmt.Println("panic")
    } else {
        fmt.Println("successful")
    }
}()

此外,上述代码将停止死机(函数将成功返回)。如果你想继续恐慌,你必须做
panic(err)
。是的,要知道这一点。谢谢