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 main
import "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的语句最先执行。
相关内容
这些是最新的
热门排行
- THINKPHP5+GatewayWorker+Workerman 开发在线客服系统
- 在手机浏览器网页中点击链接跳转到微信界面的方法
- 尊云网站目录系统 ThinkPHP5网站分类目录程序 v2.2.221011
- CentOS 7安装shadowsock(一键安装脚本)
- AdminTemplate 基于LayUI 2.4.5实现的网站后台管理模板
- 用NW.js(node-webkit)开发多平台的桌面客户端
- PHP生成随机昵称/用户名
- THINKPHP5网站分类目录程序 尊云网站目录系统
- 织梦(DEDECMS)微信支付接口 微信插件
- 基于LayUI开发的 网站后台管理模板 BeginnerAdmin
- 响应式后台网站模板 - AMA.ADMIN
- layuiAdmin后台管理模板 Iframe版
- LayUI 1.0.9 升级 至 LayUI 2.1.4 方法
- 简洁清爽的会员中心模板
- jQuery幸运大转盘抽奖活动代码