defer是go中非常好用的关键字,它们都是在程序即将结束时执行,可以用来执行一些关闭文件的操作,并且按照声明时的逆序进行执行
1、defer的调用顺序与它的声明顺序相反
func main() { for i := 0; i < 4; i++ { defer fmt.Println(i) } }
输入结果为:
3
2
1
0
2、defer中参数的值为当其声明时参数的值
func main() { i := 0 defer fmt.Println(i) i++ return }
在defer声明的时候i为1
所以输出结果为:
0
3、defer还可以对返回值进行修改
func main() { fmt.Println(c()) } func c() (i int) { defer func() { i++ }() return 2 }
输出结果为:
3