一、defer原理
二、示例
1、
package main
import (
"fmt"
)
func funcA() int {
x := 5
defer func() {
x += 1
}()
return x
}
func main() {
fmt.Println(funcA())
}
/*
输出:5
原因:返回值在defer前已经确定了
*/
2、
func funcB() (x int) {
defer func() {
x += 1
}()
return 5
}
/*
输出:6
原因:先将5赋值给x, defer再调用x
*/
3、
func funcC() (y int) {
x := 5
defer func() {
x += 1
}()
return x
}
/*
输出:5
原因:先将5赋值给y, defer只改变x
*/
4、
func funcD() (x int) {
defer func(x int) {
x += 1
}(x)
return 5
}
/*
输出:5
原因:先将5赋值给x, defer再调用x(值传递),改变的是x的副本
*/