defer关键字可以延迟一个函数的执行,直到这个函数返回,无论是正常的return返回,还是由于意外情况。
延迟到函数返回后
被defer延迟执行的函数,其调用会发生在函数返回之后:
func main() {
ret := returnVal(5)
fmt.Printf("ret %d", ret)
}
func returnVal(val int) int {
defer func() {
val++
fmt.Println(val)
}()
return val
}
//-----console-----
//6
//ret 5
可以看到匿名函数被延迟执行到函数返回之后,因为这里修改了变量val但是函数返回值没有变。
FILO
先通过defer延迟的函数后执行:
func main() {
defer func() {
fmt.Println("defer1")
}()
defer func() {
fmt.Println("defer2")
}()
}
//-----console-----
//defer2
//defer1
BGM
{#{% music id=“1862798463” auto=“1” %}#}