GO语言延迟函数defer怎么使用
今天主机评测网小编给大家分享一下GO语言延迟函数defer怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
go语言中
defer
最主要的目的是在函数执行完毕后及时的释放资源
入门案例
packagemainimport"fmt"funcsum(n1int,n2int)int{//当执行到defer时,会将defer后面的语句压入到独立的栈中(我们取名为defer栈吧)//当函数执行完毕后,再从defer栈,先进后出的方式出栈然后执行deferfmt.Println("ok1n1=",n1)//3.n1deferfmt.Println("ok2n2=",n2)//2.n2res:=n1+n2//res=30,首先执行fmt.Println("ok3res=",res)//1.res=n1+n2returnres}funcmain(){res:=sum(10,20)fmt.Println("mainres=",res)}
main方法调用sum
函数
代码执行到第一个defer
后,编译器(系统)会将第一个defer
这段压入到defer的栈中
(暂时不执行)
注意事项
当ggo执行到一个
defer
时,不会立刻执行defer后的语句,而是将defer后的语句压入一个独立的栈中,然后继续执行函数下一条语句当执行完毕后,再从
defer栈(只是为了理解这么叫,实际其实只是一个独立的栈)
,依次从栈顶取出语句执行(先进后出原则)在
defer
将语句放入栈时,也会将相关的值拷贝同时入栈(入栈时是什么值就是什么值)
packagemainimport"fmt"funcsum(n1int,n2int)int{//当执行到defer时,会将defer后面的语句压入到独立的栈中(我们取名为defer栈吧)//当函数执行完毕后,再从defer栈,先进后出的方式出栈然后执行deferfmt.Println("ok1n1=",n1)//n1=10deferfmt.Println("ok2n2=",n2)//n2=20n1++//添加代码:n1++n2++//添加代码:n2++res:=n1+n2fmt.Println("ok3res=",res)//res=32returnres}funcmain(){res:=sum(10,20)fmt.Println("mainres=",res)//结果还是会被影响res=32}
结果
defer最佳实践
defer主要的价值是在当函数执行完毕后,可以及时释放函数创建的资源
//示意代码functest(){//关闭文件资源file=openfile(文件名)deferfile.close()//其他代码//连接的数据库还是可以使用的}
functest(){//释放数据库资源connect=openDatabase()deferconnect.close()//其他代码//连接的数据库还是可以使用的}
在golang编程中的通常的做法是,创建资源后,比如(打开了文件,获取了数据库连接或者时锁等资源)可以执行
defer
语句来进行关闭(函数执行完后才从独立的栈中释放关闭资源)在
defer
后可以继续使用创建的资源当函数执行完后,系统会依次从这个独立的栈中取出语句或关闭资源
以上就是“GO语言延迟函数defer怎么使用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注主机评测网行业资讯频道。
输入法切换键是哪个键?输入法切
冬月是哪一个月?冬月是什么意思
个人所得税退税金额怎么算出来的
输入法全角和半角有什么区别?输
a4纸尺寸是多少厘米?a4纸的由来
个人所得税扣除标准?个人所得税
输入法哪个好用?输入法介绍
卡拉OK是哪个国家发明的?卡拉OK
mikutools原神网页版入口链接?m
关机特别慢什么原因?电脑和手机