MST

星途 面试题库

面试题:Go语言defer在复杂函数结构中的执行顺序

假设你有一个递归函数,在递归调用的过程中插入了多个defer语句,分析并说明这些defer语句的执行顺序,同时编写代码验证你的分析。
44.5万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

在Go语言中,defer语句会在函数返回前执行,并且按照后进先出(LIFO,Last In First Out)的顺序执行。对于递归函数中插入的多个defer语句,同样遵循这个规则。

以下是示例代码:

package main

import "fmt"

func recursiveFunction(n int) {
    if n <= 0 {
        return
    }
    defer fmt.Println("defer in recursiveFunction", n)
    recursiveFunction(n - 1)
    fmt.Println("after recursive call in recursiveFunction", n)
}

在这个recursiveFunction中,每次递归调用时都会创建一个新的defer语句。这些defer语句会在递归函数返回时,按照后进先出的顺序执行。

可以通过以下方式调用验证:

func main() {
    recursiveFunction(3)
}

执行上述代码,输出结果为:

after recursive call in recursiveFunction 1
defer in recursiveFunction 2
after recursive call in recursiveFunction 2
defer in recursiveFunction 3
after recursive call in recursiveFunction 3

可以看到,defer语句在递归函数返回时,按照后进先出的顺序执行。