面试题答案
一键面试package main
import "fmt"
func main() {
defer fmt.Println("defer 3")
defer fmt.Println("defer 2")
defer fmt.Println("defer 1")
fmt.Println("main function")
}
执行顺序
- 首先输出
main function
。 - 然后按照后进先出(LIFO,Last In First Out)的顺序执行
defer
语句,依次输出defer 1
,defer 2
,defer 3
。
原因
Go语言中的 defer
语句会将其后面跟随的语句延迟到包含该 defer
语句的函数即将返回时执行。当有多个 defer
语句时,它们会被压入一个栈中,在函数返回时,从栈顶开始依次弹出并执行,因此表现为后进先出的顺序。