成功执行函数后或出现紧急情况时如何知道延迟函数

时间:2019-06-11 09:54:37

标签: go deferred panic

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

package main

import "log"

func b() {
    panic("panicked in b")
}
func a() {

    b()
}
func main() {
    defer func() {
     // If panicked 
         log.Println("panicked")
         // if called after function successfully executed
         log.Println("Success")
         /* 
            How to understand if defer is triggered by panic or after function returned successfully.
         */
    }()
    a()
    log.Println("main code")
}

预期:Defer应该能够通过任何可能的方式知道其被恐慌呼叫

1 个答案:

答案 0 :(得分:3)

您可以使用recover来抓紧恐慌:

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