defer_执行顺序

题目:

下面这段代码输出的内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package main

import (
"fmt"
)

func main() {
defer_call()
}

func defer_call() {
defer func() { fmt.Println("打印前") }()
defer func() { fmt.Println("打印中") }()
defer func() { fmt.Println("打印后") }()

panic("触发异常")
}

答案:

1
2
3
4
打印后
打印中
打印前
panic: 触发异常

解析:

​ 在函数返回或者发生panic时,defer语句会按照先进后出的顺序执行,若是因为发生panic退出函数,则最后再执行panic语句。


defer_执行顺序
http://example.com/2023/05/01/Go每日一题/defer-执行顺序/
作者
Feng Tao
发布于
2023年5月1日
更新于
2023年5月1日
许可协议