Go 语言笔记:defer
defer 定义
defer 是 Go 新增的关键字,表示延迟调用,在 defer 之后可以紧跟表达式或者函数。defer 后面的语句会在当前函数执行完毕后被执行。
go
func main() {
defer fmt.Println("defer")
ftm.Println("main")
}
// 打印结果
main
deferdefer 栈
如果某个函数中存在有多个 defer,他们之间会以入栈的方式后进先出的顺序来执行。
go
// func3 最先执行,其次是 func2,最后执行 func1
func call() {
defer func1()
defer func2()
defer func3()
}defer 和 return 执行顺序
先说结论 :return 先于 defer 执行。defer 的执行时机是在 return 执行完成之后才开始执行
go
import "fmt"
func call() int {
defer deferCall()
return returnCall()
}
func returnCall() int {
fmt.Println("return called.")
return 0
}
func deferCall() int {
fmt.Println("defer called.")
return 0
}
func main() {
call()
}
// 打印结果
return called.
defer called.