面试题答案
一键面试在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语句在递归函数返回时,按照后进先出的顺序执行。