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的作用相关推荐

  1. JavaScript中defer的作用

    JavaScript中defer的作用 Javascript中defer的作用是文档加载完毕了再执行脚本,这样会避免找不到对象的问题. defer是脚本程序强大功能中的一个"无名英雄&quo ...

  2. C语言-return的作用总结

    目录 1.为调用的函数返回参数值 2.提前结束函数 3.返回一个函数 C语言return的作用是什么?相信很多新手小白对C语言return的作用的了解处于懵懂状态,通过这篇文章的总结,希望你能有所收获 ...

  3. C语言:static作用(修饰函数、局部变量、全局变量)

    C语言:static作用(修饰函数.局部变量.全局变量) 一. static全局变量与普通的全局变量有什么区别 ? 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量.  全局变 ...

  4. %3c故乡%3e中语言描写的作用是什么,语言描写的作用

    语言描写的作用2019-05-05 14:39:30文/刘美娟 语言描写是塑造人物形象的重要手段,成功的语言描写总是鲜明地展示人物的性格,生动地表现人物的思想感情,深刻地反映人物的内心世界. 语言能显 ...

  5. Go语言defer详解笔记

    Go语言defer详解 1.defer概述: ​ defer是用来声明一个延迟函数,并且将这个函数放到一个栈中,它的调用时间在return执行之前,详细来讲,它的执行时间在return的值赋值之后,在 ...

  6. Go语言defer关键字

    Go语言的defer关键字用于延迟调用,下面是关于Go语言defer关键字的一些基础概念: 1. defer关键字用于注册延迟调用: 2. 这些调用直到包含当前该defer关键字的函数执行完了才会被执 ...

  7. Go语言 defer

    引言 Go 语言中的 defer 语句是 UNIX 之父 Ken Thompson 大神发明的,是完全正交的设计. 也正因为 Go 语言遵循的是正交的设计, 所以才有了: "少是指数级的多/ ...

  8. step在c语言中什么作用,C语言step-by-step(二)(数据类型)

    第2章:数据类型 先介绍一些计算机指令简单的知识: 大家都知道我们的计算机有硬盘.有内存这两样东西,都属于存储器,但是硬盘属于在掉电后不丢失信息,一般我们把资料存放在硬盘:然而内存掉电会丢掉所有信息, ...

  9. Go语言defer详解

    1. 使用defer的优势 defer一般用于资源的释放和异常的捕捉, 作为Go语言的特性之一. defer 语句会将其后面跟随的语句进行延迟处理. 意思就是说 跟在defer后面的语言 将会在程序进 ...

最新文章

  1. Java 定义字符串数组
  2. 1.Tomcat配置
  3. kali64位下载怎么是AMD_AMD平台虚拟机安装macOS Sierra方法
  4. 百度开源分布式id生成器uid-generator源码剖析
  5. rest_framework10:base64补充/修改头像
  6. ITPro Magazine2006年第6期发布
  7. lgg6 android 9,LG G6的18:9屏幕用起来到底是什么样
  8. MySql(15)——Mysql在高并发情况下,防止库存超卖而小于0的解决方案
  9. java三大框架介绍
  10. java小写金额转大写金额_java转换小写金额为大写金额
  11. 思迅商云8版的最后一个版本_泪目!科比成为2K21第3位封面球星,将推出曼巴永恒版...
  12. 【华为云技术分享】物联网常用开发板
  13. NLP——李宏毅课程笔记
  14. 【Spring源码三千问】Bean的Scope有哪些?scope=request是什么原理?
  15. Python破解12306图片验证码
  16. Linux 系统如何设置开机程序自启动
  17. 诺基亚Vertu Constellation root教程_方法
  18. HashMap、ConcurrentHashMap源码解读(JDK7/8)
  19. 出现Cannot refer to the non-final local variable guoDeGang defined in an enclosing scope
  20. python:pyautocad

热门文章

  1. 剑指Offer_47_求1+2+3+...+n
  2. 缺陷管理系统mantisbt环境搭建
  3. 一步步学习微软InfoPath2010和SP2010--第二章节--表单需求:使用决策矩阵(6)--结合基于客户端和基于浏览器的控件...
  4. UVA 10558 A Brief Gerrymander
  5. 《 Linux的安装和入门 》
  6. 初学者python笔记(filter()函数完全详解)
  7. P1421 小玉买文具【入门题】
  8. 安卓手机软件开发_奇怪!苹果手机运存小,流畅度反而胜于安卓,今天终于明白了...
  9. 离职通知邮件主题写什么好_(原创)拿到了企业的offer后要注意什么?
  10. python调用robotframework api_python+robot framework接口自动化测试