Go 中文网、思否、博客园等平台,内容主要以问答形式记录。如果回答中有错误,欢迎大家指出,共同学习、共同进步。
Go每日一题_20250522
下面这段代码输出什么? 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 } func calc(index string, a, b int) int { ret := a + b fmt.Println(index, a, b, ret) return ret } 🔑 答案解析: 10 1 2 3 20 0 2 2 2 0 2 2 1 1 3 4 程序执行到 main() 函数三行代码的时候,会先执行 calc() 函数的 b 参数,即:calc(“10”,a,b),输出:10 1 2 3,得到值 3,因为 defer 定义的函数是延迟函数,故 calc(“1”,1,3) 会被延迟执行; 程序执行到第五行的时候,同样先执行 calc(“20”,a,b) 输出:20 0 2 2 得到值 2,同样将 calc(“2”,0,2) 延迟执行; 程序执行到末尾的时候,按照栈先进后出的方式依次执行:calc(“2”,0,2),calc(“1”,1,3),则就依次输出:2 0 2 2,1 1 3 4。