defer与return常考点
简述 defer 和 return 返回值 的执行顺序?如果要返回一个 defer 执行后的值, 可以通过哪些方式?
大家好 我是寸铁👊
总结了一篇defer 和 return 返回值 的执行顺序探讨的文章✨
喜欢的小伙伴可以点点关注 💝
程序1
不返回具体变量
执行顺序:
进入test函数
- 先把返回的结果赋值
- 执行
defer
函数 - 如果说
defer
函数中存在打印输出的内容,则先输出defer
语句的内容。
按照指定的顺序输出,后进先出的顺序输出 - 再返回到主函数main中,把之前赋值的返回的结果输出来
注意:return的结果是不会受
defer
函数而影响的,但是假如在defer外
在return之前
进行赋值
则会返回当前更新
的值。
demo
func Test() int {
a := 1
defer func() {
fmt.Println("a", a) // a 1
a = 4
fmt.Println("2", a) // 2 4
}()
return a // 1
}
func main() {
fmt.Println(Test