MST

星途 面试题库

面试题:Go中defer语句在函数调用链中的执行顺序

假设有函数A调用函数B,函数B又调用函数C,且在A、B、C函数中都使用了defer语句,描述defer语句在这种函数调用链中的执行顺序,并说明原因。
12.7万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
  1. 执行顺序
    • 当函数C执行完毕,会先执行函数C中的defer语句。
    • 接着函数B执行完毕,执行函数B中的defer语句。
    • 最后函数A执行完毕,执行函数A中的defer语句。
  2. 原因
    • defer语句的特点是,将其后面跟随的语句延迟到包含该defer语句的函数即将返回时才执行。在这种函数调用链中,函数C先执行完,所以它的defer语句会最先到执行时机;然后函数B执行完,其defer语句到执行时机;最后函数A执行完,执行其defer语句。这就像栈的操作,先入后出,defer语句在函数执行过程中被“压入栈”,函数结束时按顺序“弹出栈”执行。