defer语句将函数调用推送到列表上。周围函数返回后,将执行保存的呼叫列表。-
转到博客:延期,恐慌和恢复
理解上述陈述的另一种方式:
defer语句 将 函数调用压入 堆栈 。 弹出 的已保存调用 (LIFO) 和延迟函数的堆栈在周围函数返回之前立即被调用。
func c() (i int) { defer func() { i++ }() return 1}返回1后,
func() { i++ }()将执行延迟。因此,按执行顺序:- i = 1(返回1)
- i ++(延迟功能从堆栈中弹出并执行)
- i == 2(命名变量i的最终结果)
为了理解起见:
func c() (i int) { defer func() { fmt.Println("third") }() defer func() { fmt.Println("second") }() defer func() { fmt.Println("first") }() return 1}执行顺序:
- i = 1(返回1)
- “第一”
- “第二”
- “第三”



