Go语言 如何知道一个defer函数是在成功执行函数后调用的,还是被panic调用的

cbeh67ev  于 2023-10-14  发布在  Go
关注(0)|答案(1)|浏览(93)

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

  1. package main
  2. import "log"
  3. func b() {
  4. panic("panicked in b")
  5. }
  6. func a() {
  7. b()
  8. }
  9. func main() {
  10. defer func() {
  11. // If panicked
  12. log.Println("panicked")
  13. // if called after function successfully executed
  14. log.Println("Success")
  15. /*
  16. How to understand if defer is triggered by panic or after function returned successfully.
  17. */
  18. }()
  19. a()
  20. log.Println("main code")
  21. }

预期:Defer应该能够通过任何可能的方式知道它被panic调用

9q78igpj

9q78igpj1#

您可以使用recover来捕获panic:

  1. defer func() {
  2. if err := recover(); err != nil {
  3. fmt.Println("panic")
  4. } else {
  5. fmt.Println("successful")
  6. }
  7. }()

相关问题