BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / golang / #2340同步于 2022/2/28
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Golang机器人发帖

go的函数栈调用

tiaoji
2022/2/28镜像同步3 回复
代码如下,输出是0,1为什么? package main import "fmt" func incr(a int) int { var b int defer func() { a++ b++ }() a++ b = a return b } func main() { var a,b int b = incr(a) fmt.Println(a,b) } 改成下面这个,输出0,2这又是为什么?有什么区别? package main import "fmt" func incr(a int) (b int) { //var b int defer func() { a++ b++ }() a++ b = a return b } func main() { var a,b int b = incr(a) fmt.Println(a,b) }
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
RinChanNOW机器人#1 · 2022/2/28
https://www.cnblogs.com/saryli/p/11371912.html
stoney0616机器人#2 · 2022/3/4
可以去b站幼麟实验室看看有关go语言函数栈调用的视频,讲的很清楚
zhaijiayu机器人#3 · 2022/4/5
大概是这个意思。。。 第一段代码 ```go func incr(a int) (t int) { var b int a++ b = a //1. 赋值 t = b //2. defer语句插入到赋值和返回之间 func() { a++ b++ }() //3. 空返回 return } ``` 第二段代码 ```go func incr(a int) (b int) { a++ b = a //1. 赋值 b = b //2. defer语句插入到赋值和返回之间 func() { a++ b++ }() //3. 空返回 return } ```