本文共 1378 字,大约阅读时间需要 4 分钟。
点击上方蓝色“Golang来啦”关注我哟
加个“星标”,天天 15 分钟,一起学 Go
1.下面列举的是 recover() 的几种调用方式,哪些是正确的?
A.
1func main() {2 recover()3 panic(1)4}
B.
1func main() {2 defer recover()3 panic(1)4}
C.
1func main() {2 defer func() {3 recover()4 }()5 panic(1)6}
D.
1func main() {2 defer func() {3 defer func() {4 recover()5 }()6 }()7 panic(1)8}
参考答案及解析:C。recover() 必须在 defer() 函数中直接调用才有效。上面其他几种情况调用都是无效的:直接调用 recover()、在 defer() 中直接调用 recover() 和 defer() 调用时多层嵌套。
2.下面代码输出什么,请说明?
1func main() { 2 defer func() { 3 fmt.Print(recover()) 4 }() 5 defer func() { 6 defer fmt.Print(recover()) 7 panic(1) 8 }() 9 defer recover() 10 panic(2)11}
参考答案及解析:21。recover() 必须在 defer() 函数中调用才有效,所以第 9 行代码捕获是无效的。在调用 defer() 时,便会计算函数的参数并压入栈中,所以执行第 6 行代码时,此时便会捕获 panic(2);此后的 panic(1),会被上一层的 recover() 捕获。所以输出 21。
引自《Go语言101》
解析若有不妥之处,欢迎在留言区交流、指正!
看下今天的题目:
A. if flag == 1
B. if flag
C. if flag == false
D. if !flag
2.下面的代码输出什么,请说明?
1func main() { 2 defer func() { 3 fmt.Print(recover()) 4 }() 5 defer func() { 6 defer func() { 7 fmt.Print(recover()) 8 }() 9 panic(1)10 }()11 defer recover()12 panic(2)13}
这道题与昨天的第二题有点类似,不过答案都在昨天的两道题目里了。
答案以及解析会在下一篇文章中给出,鼓励大家在留言区留下答案,抱团学习,日拱一卒,每天进步一点!
ps:看完文章如果有收获,顺手花 1s 时间帮点下文末右下方的「在看」,感激!
所有学习上的成功,都只依靠两件事 -- 策略和坚持,而坚持本身就是最重要的策略!
推荐阅读:
转载地址:http://uzfnb.baihongyu.com/