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!

浙公网安备 33010602011771号