() int {
res := 1000
defer fmt.Println("defer输出:", res)
res += 1000
return res
}
以上输出为:...原因是:defer 函数的参数在定义的时候就以及确定了(形参拷贝),所以后面就算修改了值也不会发生变化
示例二 defer函数确定
package main
import "fmt"
func main...("defer输出:", res)
}()
res += 1000
return res
}
以上输出为:
原因是 defer只确定了一个匿名函数地址,匿名函数进行第二次的调用,在匿名函数确定好的时候...方法,如果defer将返回值变更,则返回时数据也会变更....但是在执行返回跳转操作时,还需要执行defer函数,所以在defer函数中可以操作这个返回值
但是在特殊情况下,defer函数无法操作返回值
特殊情况一:函数有匿名返回值,直接返回字面量
func