panic.go 670 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package main
  2. import "fmt"
  3. func main() {
  4. // foo1()
  5. // foo2()
  6. foo3()
  7. }
  8. func getSomeVars() string {
  9. fmt.Println("getSomeVars execution")
  10. return "getSomeVars result"
  11. }
  12. func foo1() {
  13. defer fmt.Println("After work")
  14. defer fmt.Println(getSomeVars())
  15. fmt.Println("Some useful work")
  16. }
  17. func foo2() {
  18. defer fmt.Println("After work")
  19. defer func() {
  20. fmt.Println(getSomeVars())
  21. }()
  22. fmt.Println("Some useful work")
  23. }
  24. // Паника
  25. func deferTest() {
  26. defer func() {
  27. if err := recover(); err != nil {
  28. fmt.Println("panic happend:", err)
  29. }
  30. }()
  31. fmt.Println("Some useful work")
  32. panic("something bad happend")
  33. return
  34. }
  35. func foo3() {
  36. deferTest()
  37. return
  38. }