我需要在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应该能够通过任何可能的方式知道其被恐慌呼叫
答案 0 :(得分:3)
您可以使用recover
来抓紧恐慌:
defer func() {
if err := recover(); err != nil {
fmt.Println("panic")
} else {
fmt.Println("successful")
}
}()