下面代码输出什么?
func increaseA() int {
var i int
defer func() {
i++
}()
return i
}
func increaseB() (r int) {
defer func() {
r++
}()
return r
}
func main() {
fmt.Println(increaseA())
fmt.Println(increaseB())
}
- A. 1 1
- B. 0 1
- C. 1 0
- D. 0 0
defer 修饰的匿名函数,只能更新具名返回值
打卡
GET
学习了
di
mark
mark
Mark.
B. 0 1 ;func increaseA() int {,返回值i=0的时候已经绑定到返回值里里,defer改i没用了。func increaseB() (r int) {先把返回变量r设为0,defer又把r改为1. (golang码农求职)
mark
mark
打卡
mark........
defer 更新具名返回值 B
return语句是把return后面的值赋给返回值,但由于increaseB中有return变量r,所以在defer里还可以对变量r进行再更新,所以返回的r为1
搞反了,
return i
返回值固定了。make
先return 后defer 再进行函数返回
打卡学习
mk
defer 修饰的匿名函数,只能更新具名返回值
1
mk
打卡
打卡
make
mark
好难啊
mark
done
具名返回值
打卡
mark
mark
mark
打卡
good2333333
mark
1