当前位置: 首页 > news >正文

GO——defer函数

定义

当前函数返回之前执行传入函数的一个关键字

执行时间

当前函数返回前执行

常用于

  • 关闭文件描述符
  • 关闭数据库链接
  • 解锁资源
原理

参考:https://draveness.me/golang/docs/part2-foundation/ch05-keyword/golang-defer/

后调用的 defer 函数会先执行:

  • 后调用的 defer 函数会被追加到 Goroutine _defer 链表的最前面;
  • 运行 runtime._defer 时是从前到后依次执行;

函数的参数会被预先计算;

  • 调用 runtime.deferproc 函数创建新的延迟调用时就会立刻拷贝函数的参数,函数的参数不会等到真正执行时计算;
Go 语言中所有的函数调用都是传值的

参考:https://draveness.me/golang/docs/part2-foundation/ch05-keyword/golang-defer/

pannic之后会执行defer吗

  • panic之后,有序退出,会执行defer链表
  • 参考:https://ieevee.com/tech/2017/11/23/go-panic.html
  • 后进先出
defer执行
package mainimport "fmt"func main() {fmt.Println("main :  ",test())}func test()  int {a := 1defer func() {a++fmt.Println("defer",a)}()fmt.Println(a)return jjjj(&a)
}func jjjj(a *int) int {*a++return *a
}
http://www.lryc.cn/news/278109.html

相关文章:

  • 【UE Niagara学习笔记】06 - 制作火焰喷射过程中飞舞的火星
  • 机器学习笔记一之入门概念
  • 用于脚本支持的 CSS 媒体查询
  • 【HBase】——整合Phoenix
  • 【操作系统xv6】学习记录5--实验1 Lab: Xv6 and Unix utilities
  • Python从入门到网络爬虫(控制语句详解)
  • transbigdata笔记:数据预处理
  • java中解码和编码出现乱码原因
  • 60V降压3.3V稳压芯片 60V降压5V稳压芯片60V降压12V稳压芯片
  • 01第一个Mybatis程序+引入Junit+引入日志文件logback
  • 音乐制作软件Studio One mac有哪些特点
  • 开源C语言库Melon之日志模块
  • [NOIP2006 提高组] 作业调度方案(修改)
  • uniapp微信小程序投票系统实战 (SpringBoot2+vue3.2+element plus ) -全局异常统一处理实现
  • 浏览器缓存引发的odoo前端报错
  • 如何搭建开源知识库软件AFFiNE并实现公网环境远程协作【内网穿透】
  • 记忆泊车信息安全技术要求
  • 开源分布式任务调度系统DolphinScheduler本地部署与远程访问
  • C++day3作业
  • 设计模式⑤ :一致性
  • Android通过Recyclerview实现流式布局自适应列数及高度
  • AlexNet(fashion-mnist)
  • 2024新年烟花代码完整版
  • Fontfabric:一款字体与设计的完美结合
  • Python爬虫—requests模块简单应用
  • 江科大STM32
  • 银河麒麟Kylin-Server-V10-SP3使用ISO镜像搭建本地内网YUM/DNF源cdrom/http
  • 力扣第 379 场周赛VP
  • String intern()方法
  • springboot 物业管理系统