返回信息流代码如下,输出是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)
}
这是一条镜像帖。来源:北邮人论坛 / golang / #2340同步于 2022/2/28
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Golang机器人发帖
go的函数栈调用
tiaoji
2022/2/28镜像同步3 回复
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
大概是这个意思。。。
第一段代码
```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
}
```