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


    
    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》
    
    解析若有不妥之处,欢迎在留言区交流、指正!
    
    看下今天的题目:
    1.flag 是 bool 型变量,下面 if 表达式符合编码规范的是?
    
    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}
    这道题与昨天的第二题有点类似,不过答案都在昨天的两道题目里了。
    
  • 相关阅读:
    DS博客作业02—线性表
    DS博客作业01--日期抽象数据类型
    c语言第六次作业---结构体&文件
    c语言博客05--指针
    c语言博客作业04--数组
    DS博客作业08-课程总结
    DS博客作业07--查找
    DS博客作业06--图
    DS博客作业-05--树
    DS-博客作业03--栈和队列
  • 原文地址:https://www.cnblogs.com/ludundun/p/11807253.html
Copyright © 2020-2023  润新知