这段代码的执行结果是什么?
func main() {
defer_call()
}
func defer_call() {
defer func() { fmt.Println("打印前") }()
defer func() { fmt.Println("打印中") }()
defer func() { fmt.Println("打印后") }()
panic("触发异常")
}
//执行结果
打印后
打印中
打印前
panic: 触发异常
goroutine 1 [running]:
main.defer_call()
D:/golandWorkapace/src/cn.basecommon/offer/offer1/main.go:15 +0x97
main.main()
D:/golandWorkapace/src/cn.basecommon/offer/offer1/main.go:8 +0x17
Process finished with exit code 2
defer 的执行顺序是后进先出。当出现 panic 语句的时候,会先按照 defer 的后进先出的顺序执行,最后才会执行panic
每个defer中会保存上一个定义的defer方法地址 执行完会去寻找调用上一个定义的defer

本文通过一个Go语言示例详细解析了defer与panic的工作机制,包括它们的执行顺序及异常处理流程。
1778

被折叠的 条评论
为什么被折叠?



