87_Go基础_1_55 panic and recover
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 }