Go defer语句
package main import "fmt" func f1() int { // 1、先执行返回值赋值,返回值等于x,等于5 // 2、执行defer语句,x++,x等于6 // 3、返回指令,返回返回值5 x := 5 defer func() { x++ // 修改的是x,不是返回值 }() return x } func f2() (x int) { // 1、先执行返回值赋值语句,所以return 5 -> x = 5 // 2、执行defer语句,返回值x++ -> x = 6 // 3、返回指令,返回6 defer func() { x++ }() return 5 } func f3() (y int) { x := 5 defer func(x int) { x++ }(x) return x } func f4() (x int) { defer func(x int) { x++ // 改的是函数中的副本,不影响外层的x值 }(x) return 5 } func main() { fmt.Println(f1()) fmt.Println(f2()) fmt.Println(f3()) fmt.Println(f4()) }
Resistance is Futile!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步