Golang 函数-defer
1.当程序执行到函数中的defer时,不会立即执行defer后的语句,而是将defer后的语句存到一个栈中,继续执行后面的代码。
2.当函数执行完后,在从栈中一次取出defer语句执行(遵循先进后出的机制)
func sum(n1,n2 int)int{
defer fmt.Println("n1=",n1) //3
defer fmt.Println("n2=",n2) //2
res := n1+n2
fmt.Println("res=",res) //1
return res
}
sum(5,6)
//输出结果
res= 11
n2= 6
n1= 5
3.将defer语句放入栈中时,会将相关的值拷贝到栈中
func sum(n1,n2 int)int{
defer fmt.Println("n1=",n1) //3 n1=5 n1和n2的值不会改变
defer fmt.Println("n2=",n2) //2 n2=6
n1++ //n1=6
n2++ //n2=7
res := n1+n2
fmt.Println("res=",res) //1
return res
}
sum(5,6)
//输出结果
res= 13
n2= 6
n1= 5
defer最佳实践
在函数执行完时,及时的释放资源
func test(){
//拿到文件资源,马上defer关闭,不影响函数的使用
file = openfile(文件名)
defer file.close()
//其他代码
}
浙公网安备 33010602011771号