1 package main
2
3 import "fmt"
4
5 func myprint(s string) {
6 fmt.Println(s)
7 }
8
9 func funA() {
10 fmt.Println("我是一个函数funA()....")
11 }
12
13 func funB() {
14 // 外围函数
15 fmt.Println("我是函数funB()...")
16 defer myprint("defer funB():1.....")
17
18 for i := 1; i <= 10; i++ {
19 fmt.Println("i:", i)
20 if i == 5 {
21 panic("funB函数,恐慌了") // 让程序中断
22 }
23 }
24
25 // 当外围函数的代码中发生了运行恐慌,只有其中所有的"已经defer的函数"
26 // 全部都执行完毕后,该运行恐慌才会真正被扩展至调用处。
27 defer myprint("defer funB():2.....")
28 }
29
30 func main() {
31 /*
32 panic:词义"恐慌",
33 recover:"恢复"
34 go语言利用panic(),recover(),实现程序中的极特殊的异常的处理
35 panic(),让当前的程序进入恐慌,中断程序的执行
36 recover(),让程序恢复,必须在defer函数中执行
37 */
38
39 defer func() {
40 if msg := recover(); msg != nil {
41 fmt.Println(msg, "程序回复啦。。。")
42 }
43 }()
44
45 funA()
46 defer myprint("defer main:3.....")
47 funB()
48 defer myprint("defer main:4.....")
49
50 fmt.Println("main..over。。。。")
51
52 /*
53 我是一个函数funA()....
54 我是函数funB()...
55 1
56 2
57 3
58 4
59 5
60 defer funB():1.....
61 defer main:3.....
62 funB函数,恐慌了,程序回复啦。。。
63
64 */
65 }