defer的执行逻辑

  • 概述

根据官网对defer的描述,

defer func()的存储结构是栈,即LIFO,有多次defer调用时遵循后进先出的逻辑进行执行

而go中return的逻辑如下

  1. 先将返回值赋值
  2. 执行 defer 栈
  3. 返回调用函数
  • 举个栗子

1
2
3
4
5
6
7
8
9
func demo() (res int) {
for i := 1; i < 4; i++ {
defer func() {
res = i * i
fmt.Printf("res:\t%d\n", res)
}()
}
return
}

函数返回值为 1,终端输出如下:

1
2
3
res:	9
res: 4
res: 1

defer的执行逻辑
https://victorwong171.github.io/2025/09/21/defer的执行逻辑/
作者
衣云乘风
发布于
2025年9月20日
许可协议