首页新闻找找看学习计划

Go语言中的defer执行顺序问题

0
[已解决问题] 解决于 2019-10-11 10:21

package main

import "fmt"

func calc(index string, a, b int) int {
ret := a + b
fmt.Println(index, a, b, ret)
return ret
}

func main() {
a := 1
b := 2
defer calc("1", a, calc("10", a, b))
a = 0
defer calc("2", a, calc("20", a, b))
b = 1
fmt.Println("a,b:", a, b)
}

defer不是最后倒序执行么?这个执行代码顺序为什么是
10 1 2 3
20 0 2 2
a,b: 0 1
2 0 2 2
1 1 3 4

CrazyDemo的主页 CrazyDemo | 菜鸟二级 | 园豆:206
提问于:2019-10-10 15:59
< >
分享
最佳答案
1

https://yourbasic.org/golang/defer/
defer的函数参数是即时处理的,因此calc("10 calc("20 这些先出来了

奖励园豆:5
2012 | 专家六级 |园豆:18877 | 2019-10-11 08:43

昨天我查了一些文档,这个不只是函数参数立即执行,还有defer后参数赋值的问题(详见最后一次打印数值),我已经搞清楚了。不过谢谢你的回帖。

CrazyDemo | 园豆:206 (菜鸟二级) | 2019-10-11 10:20
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册