defer 被调用时机
- 代码测试
package main
import(
"fmt"
)
func main(){
deferOpp()
deferOppP(8)
a:=deferOppP1()
fmt.Prinltn(a)
}
//1、没有参数,没有看到明显效果
func deferOpp(){
defer fmt.Println("最后执行")
fmt.Println("开始执行")
return
}
//2、有参数,可以明显的看到效果
func deferOppP(a int){
defer func(){
a++
fmt.Println(a)
}()
fmt.Println(a)
return
}
//不同:defer可以读取有名返回值。
func deferOppP1()(a int){
defer func(){
a++
fmt.Println(a)
}()
fmt.Println(a)
return a
}
- 运行效果
这里开始执行
这里应该最后执行
8
9
1
- 总结
- defer是在return之后执行的
对于defer中有名返回值和无名返回值的区别,有兴趣的可以看(引用)