Go func defer

defer + 异常
你说的对,我之前的解释有误。我们来重新分析这个代码。
package main
func test(x int) {
defer println("a")
defer println("b")
defer func() {
println(100 / x) // 这里会引发除以零异常
}()
defer println("c")
}
func main() {
test(0)
}
defer 的执行顺序
在 Go 语言中,defer 语句会将其后的函数推迟到包含该 defer 语句的函数返回之后再执行。多个 defer 语句会按照后进先出(LIFO,Last In First Out)的顺序执行。
在 test 函数中,defer 语句的执行顺序如下:
defer println("a")defer println("b")defer func() { println(100 / x) }()defer println("c")
由于 defer 语句按照 LIFO 顺序执行,所以它们的实际执行顺序是:
defer println("c")defer func() { println(100 / x) }()defer println("b")defer println("a")