Go关于defer的一道面试题

请写出输出结果

func main(){
    a := 1
    b := 2
    defer calc(a, calc(a,b))
    a = 0
    defer calc(a, calc(a,b))
}
func calc(x,y int){
    fmt.Println(x,y,x+y)
    return x+y
}

结果是

1 2 3
0 2 2
0 2 2
1 3 4

考察两个知识点:
1.defer是栈调用,后写的先执行
2.defer的函数调用语句会在父函数调用后执行,但是用到的参数会在当时就执行得出

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,765评论 18 399
  • 所有知识点已整理成app app下载地址 J2EE 部分: 1.Switch能否用string做参数? 在 Jav...
    侯蛋蛋_阅读 2,507评论 1 4
  • 【宝宝米粉选择系列️】 关于宝宝第一口辅食的选择,选择的原则是:【高铁,无糖,成分单一】,最好仅有一种谷物以便于消...
    妍宝mom阅读 437评论 0 0
  • 顺德区人民政府结合广东省第八届“省长杯”工业设计大赛的总体安排部署,顺德作为分赛区承办单位,稳握契机同期创设“D-...
    版木年画阅读 275评论 0 0
  • 文:半夏 图:源自网络 冬天已经到了,随着气温的逐渐降低,作为北方妹子也是时候吐槽一下这气候的干燥...
    秋秋很开心阅读 4,016评论 70 237