Go语言面试题--进阶提升(3)

1.下面列举的是 recover() 的几种调用方式,哪些是正确的?

A.
func main() {
  recover()
  panic(1)
}
B.
func main() {
  defer recover()
  panic(1)
}
C.
func main() {
  defer func() {
      recover()
  }()
  panic(1)
}
D.
func main() {
  defer func() {
      defer func() {
         recover()
      }()
  }()
  panic(1)
}

参考答案及解析:C。recover() 必须在 defer() 函数中直接调用才有效。上面其他几种情况调用都是无效的:直接调用 recover()、在 defer() 中直接调用 recover() 和 defer() 调用时多层嵌套。

2.下面代码输出什么,请说明?

func main() {
    defer func() {
        fmt.Print(recover())
    }()
    defer func() {
        defer fmt.Print(recover())
        panic(1)
    }()
    defer recover() 
    panic(2)
}

参考答案及解析:21。recover() 必须在 defer() 函数中调用才有效,所以第 9 行代码捕获是无效的。在调用 defer() 时,便会计算函数的参数并压入栈中,所以执行第 6 行代码时,此时便会捕获 panic(2);此后的 panic(1),会被上一层的 recover() 捕获。所以输出 21。

3.flag 是 bool 型变量,下面 if 表达式符合编码规范的是?

A. if flag == 1
B. if flag
C. if flag == false
D. if !flag
参考答案及解析:BCD。

4.下面的代码输出什么,请说明?

func main() {
    defer func() {
        fmt.Print(recover())
    }()
    defer func() {
        defer func() {
            fmt.Print(recover())
        }()
        panic(1)
    }()
    defer recover()
    panic(2)
}

参考答案及解析:12

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值