标签:defer 55 fmt Println func funB Go recover myprint
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 }
标签:defer,55,fmt,Println,func,funB,Go,recover,myprint 来源: https://www.cnblogs.com/luwei0915/p/15638372.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。