package main import ( "fmt" ) //defer的最佳实践是,当函数执行完毕后,可以及时的释放函数创建的资源 //在前面先写defer file.close(),先把defer压入栈不执行,先执行后面的代码,在整个test函数执行完毕后再执行这个defer中关闭文件的操作 //程序员可以不用在关注什么时候应当关闭资源了。在函数完成后悔根据defer语句自动关闭资源 //func test() { // //关闭文件资源 // file = os.OpenFile(文件名) // defer file.close() // //其他代码 //} func sum(n1 int, n2 int) int { //当执行到defer时,会将defer后面的语句压入独立的栈(defer栈) //当当前函数执行完毕后,再从defer栈,按照先入后出的方式出栈,执行 //在defer将语句放入栈时,也会将相关的值拷贝同时入栈,后面再有值改变如n1++,不会影响defer中的变量n1的值 defer fmt.Println("n1=", n1) //3.先入栈,后出.n1=10 defer fmt.Println("n2", n2) //2.后入栈,先出.n2=2 n1++ //n1 = 11 n2++ //n2 = 21 res := n1 + n2 //res = 32 fmt.Println("res=", res) //1. 打印res = 32 return res } func main() { res := sum(10, 20) fmt.Println("res-1=", res) //4.返回主函数最后执行。接收res-1 = 32 }
标签:defer,res,fmt,golang,n1,n2,执行 From: https://www.cnblogs.com/xiaoxiaomuyuyu/p/17097423.html