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()
  //其他代码 }

  

posted on 2020-03-31 22:14  、猿道  阅读(125)  评论(0)    收藏  举报

导航