为什么 Go 的 defer 语句是“后进先出”执行的?

提问者:帅平 问题分类:面试刷题
为什么 Go 的 defer 语句是“后进先出”执行的?
1 个回答
扎起头发是矫情
扎起头发是矫情
defer 的执行顺序遵循“后进先出”(LIFO)原则,因为:
栈式存储:defer 调用被压入一个栈结构,每个 defer 调用的参数和函数在声明时就被计算并存储。
执行时机:当函数即将返回时(包括正常返回或 panic),栈中的 defer 调用按逆序逐个执行。
示例代码如下:
func main() {  
    defer fmt.Println(1) // 最后执行  
    defer fmt.Println(2) // 先执行  
    fmt.Println("Start")  
}  
// 输出:Start → 2 → 1
发布于:1周前 (04-22) IP属地:
我来回答