go语言defer的作用
1.第一种情况,.differ后面只能跟着函数调用逻辑,且是压栈操作,先入后出
如下代码:
package mainimport "fmt"func main() {//go语言中并没有提供try,except,finally//defer 是go体用的一种延迟调用的机制,它可以让当前函数执行完之后执行,对于python的with语句来说,更加友好//此处有大量的逻辑要处理fmt.Println("test1")defer fmt.Println("defer test")panic("error")fmt.Println("test2")//a := 0//defer a++ defer之后只能是函数调用,不能是表达式//如果有多个defer会出现什么情况,//(1)defer 是将延迟执行的函数逻辑放在了栈中。多个differ是按照先入后出的顺序执行
}
2.第二种情况:defer执行时的拷贝机制,如下代码
package mainimport "fmt"func main() {//differ语句执行时的拷贝机制test := func() {fmt.Println("test1")}defer test()test = func() {fmt.Println("test2") //打印的时test1}
}
再比如
package mainimport "fmt"func main() {//defer语句执行时的拷贝机制x := 10defer func(a int) {fmt.Println(a)}(x)fmt.Println("test3")x++
}
打印结果:10
因为:我们已经事先将函数以及参数值都压入了。
总结:defer本质上是注册了一个延迟函数,defer函数的执行顺序 已经确定了。
defer没有嵌套,defer的机制是要取代try except finally
go语言defer的作用相关推荐
- JavaScript中defer的作用
JavaScript中defer的作用 Javascript中defer的作用是文档加载完毕了再执行脚本,这样会避免找不到对象的问题. defer是脚本程序强大功能中的一个"无名英雄&quo ...
- C语言-return的作用总结
目录 1.为调用的函数返回参数值 2.提前结束函数 3.返回一个函数 C语言return的作用是什么?相信很多新手小白对C语言return的作用的了解处于懵懂状态,通过这篇文章的总结,希望你能有所收获 ...
- C语言:static作用(修饰函数、局部变量、全局变量)
C语言:static作用(修饰函数.局部变量.全局变量) 一. static全局变量与普通的全局变量有什么区别 ? 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量. 全局变 ...
- %3c故乡%3e中语言描写的作用是什么,语言描写的作用
语言描写的作用2019-05-05 14:39:30文/刘美娟 语言描写是塑造人物形象的重要手段,成功的语言描写总是鲜明地展示人物的性格,生动地表现人物的思想感情,深刻地反映人物的内心世界. 语言能显 ...
- Go语言defer详解笔记
Go语言defer详解 1.defer概述: defer是用来声明一个延迟函数,并且将这个函数放到一个栈中,它的调用时间在return执行之前,详细来讲,它的执行时间在return的值赋值之后,在 ...
- Go语言defer关键字
Go语言的defer关键字用于延迟调用,下面是关于Go语言defer关键字的一些基础概念: 1. defer关键字用于注册延迟调用: 2. 这些调用直到包含当前该defer关键字的函数执行完了才会被执 ...
- Go语言 defer
引言 Go 语言中的 defer 语句是 UNIX 之父 Ken Thompson 大神发明的,是完全正交的设计. 也正因为 Go 语言遵循的是正交的设计, 所以才有了: "少是指数级的多/ ...
- step在c语言中什么作用,C语言step-by-step(二)(数据类型)
第2章:数据类型 先介绍一些计算机指令简单的知识: 大家都知道我们的计算机有硬盘.有内存这两样东西,都属于存储器,但是硬盘属于在掉电后不丢失信息,一般我们把资料存放在硬盘:然而内存掉电会丢掉所有信息, ...
- Go语言defer详解
1. 使用defer的优势 defer一般用于资源的释放和异常的捕捉, 作为Go语言的特性之一. defer 语句会将其后面跟随的语句进行延迟处理. 意思就是说 跟在defer后面的语言 将会在程序进 ...
最新文章
- Java 定义字符串数组
- 1.Tomcat配置
- kali64位下载怎么是AMD_AMD平台虚拟机安装macOS Sierra方法
- 百度开源分布式id生成器uid-generator源码剖析
- rest_framework10:base64补充/修改头像
- ITPro Magazine2006年第6期发布
- lgg6 android 9,LG G6的18:9屏幕用起来到底是什么样
- MySql(15)——Mysql在高并发情况下,防止库存超卖而小于0的解决方案
- java三大框架介绍
- java小写金额转大写金额_java转换小写金额为大写金额
- 思迅商云8版的最后一个版本_泪目!科比成为2K21第3位封面球星,将推出曼巴永恒版...
- 【华为云技术分享】物联网常用开发板
- NLP——李宏毅课程笔记
- 【Spring源码三千问】Bean的Scope有哪些?scope=request是什么原理?
- Python破解12306图片验证码
- Linux 系统如何设置开机程序自启动
- 诺基亚Vertu Constellation root教程_方法
- HashMap、ConcurrentHashMap源码解读(JDK7/8)
- 出现Cannot refer to the non-final local variable guoDeGang defined in an enclosing scope
- python:pyautocad
热门文章
- 剑指Offer_47_求1+2+3+...+n
- 缺陷管理系统mantisbt环境搭建
- 一步步学习微软InfoPath2010和SP2010--第二章节--表单需求:使用决策矩阵(6)--结合基于客户端和基于浏览器的控件...
- UVA 10558 A Brief Gerrymander
- 《 Linux的安装和入门 》
- 初学者python笔记(filter()函数完全详解)
- P1421 小玉买文具【入门题】
- 安卓手机软件开发_奇怪!苹果手机运存小,流畅度反而胜于安卓,今天终于明白了...
- 离职通知邮件主题写什么好_(原创)拿到了企业的offer后要注意什么?
- python调用robotframework api_python+robot framework接口自动化测试