Go语言中init函数和defer延迟调用关键词的方法是什么
这篇文章主要介绍“Go语言中init函数和defer延迟调用关键词的方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Go语言中init函数和defer延迟调用关键词的方法是什么”文章能帮助大家解决问题。
Go语言中init函数和defer延迟调用关键词
golang里面有两个保留函数
main 函数(只能应用于package main)
init 函数(能够应用于所有的package)
go程序会自动调用 init()和main() 所以你不能在任何地方调用这两个函数
package main 必须包含一个main 函数,但是每个package中的init函数都是可选的
一个package 里可以写多个init函数,建议每个包中只写一个init函数
单个包中代码执行顺序如下
main包 --> 常量 -->全局变量 --> init函数 --> main函数 -->exit
多个包之间的代码执行顺序
先按层级import 包,从最后引入包中加载常量、变量、init(),返回上级包 继续执行 加载常量、变量、init()
defer关键字,延迟调用
go语言中没有其他面向对象的析构函数,但是go语言提供了defer语句用于实现其他面向对象语言的析构函数
defer常用于释放资源、接触锁定以及错误处理等
无论在函数内什么地方注册defer 语句,他都会在所属函数执行完毕后才会执行,并且如果注册了多个的defer语句,他们会按照后进先出(先进后出)得原则执行,所以一些资源我们开后就可以注册defer语句关闭。
package mainimport "fmt"func main(){ defer fmt.Println("我是第一个被注册,最后被打印,因为defer先进后出") fmt.Print("我先被打印") defer fmt.Println("我第二个被注册,但是先被打印")}
补充:go语言中defer关键字(延迟调用)用法你会吗
一.defer关键字介绍:
Go语言中的defer语句会将其后面跟随的语句进行延迟处理,在defer归属的函数(如main函数)即将返回时(即函数快结束),将延迟处理的语句按defer定义的逆序进行执行,也就是说,先被defer的语句最后被执行,最后被defer的语句最先执行
看代码如下呢:
package main import "fmt" // Go语言中的defer语句会将其后面跟随的语句进行延迟处理// 在defer归属的函数(如main函数)即将返回时(即函数快结束),将延迟处理的语句按defer定义的逆序进行执行// 也就是说,先被defer的语句最后被执行,最后被defer的语句最先执行func main() {fmt.Println("start...")defer fmt.Println("1")defer fmt.Println("2")defer fmt.Println("3")fmt.Println("stop...")}
而这是运行结果:
start...
stop...
3
2
1
可以看出,start...和stop...先被输出,然后是3 2 1,即Go语言中的defer语句会将其后面跟随的语句进行延迟处理,在defer归属的函数(如main函数)即将返回时(即函数快结束),将延迟处理的语句按defer定义的逆序进行执行,也就是说,先被defer的语句最后被执行,最后被defer的语句最先执行。
关于“Go语言中init函数和defer延迟调用关键词的方法是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网行业资讯频道,小编每天都会为大家更新不同的知识点。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341