0
点赞
收藏
分享

微信扫一扫

Go 面试每天一篇(第 65 天)


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}

这道题与昨天的第二题有点类似,不过答案都在昨天的两道题目里了。

答案以及解析会在下一篇文章中给出,鼓励大家在留言区留下答案,抱团学习,日拱一卒,每天进步一点!


举报

相关推荐

0 条评论