defer

Go语言中有种不错的设计,即延迟(defer)语句,你可以在函数中添加多个defer语句。当函数执行到最后时,这些defer语句会按照逆序执行,最后该函数返回。特别是当你在进行一些打开资源的操作时,遇到错误需要提前返回,在返回前你需要关闭相应的资源,不然很容易造成资源泄露等问题。如下代码所示,我们一般写打开一个资源是这样操作的:

func ReadWrite() bool {file.Open("file")
// 做一些工作if failureX {file.Close()return false}if failureY {file.Close()return false}file.Close()return true
}

我们看到上面有很多重复的代码,Go的defer有效解决了这个问题。使用它后,不但代码量减少了很多,而且程序变得更优雅。在defer后指定的函数会在函数退出前调用。

func ReadWrite() bool {file.Open("file")defer file.Close()if failureX {return false}if failureY {return false}return true
}

如果有很多调用defer,那么defer是采用后进先出模式,所以如下代码会输出4 3 2 1 0

for i := 0; i < 5; i++ {defer fmt.Printf("%d ", i)
}

转自:http://blog.csdn.net/eclipser1987/article/details/12089271

转载于:https://www.cnblogs.com/bonelee/p/6582277.html

golang defer使用——资源关闭时候多用相关推荐

  1. Golang defer 快速上手

    文章目录 1.简介 2.注意事项 2.1 defer 函数入参在 defer 时确定 2.2 defer 执行顺序为后进先出 2.3 defer 函数在 return 语句赋值与返回之间执行 2.4 ...

  2. 工作实践之 try-with-resource 资源关闭

    工作实践之 资源关闭 try-with-resource 注"JDK7及其之后的资源关闭方式 注意:下面都是文件创建来举例子 *** 资源关闭优化前与优化后代码量对比*/ public cl ...

  3. 讲述java资源关闭 -莫问身后事

    java的stram流操作 垃圾回收(GC)的特别说明 常见的需要手动释放的物理资源 物理资源不手动释放有哪些问题 流的组成 jdk7之前和jdk7之后的文件拷贝功能案例说明 jdk7之前案例 jdk ...

  4. 华为android os耗电90%,华为的新系统耗电快?原来是这些设置没关,1键关闭即可多用1天...

    原标题:华为的新系统耗电快?原来是这些设置没关,1键关闭即可多用1天 最近上手了Mate30,但是觉得耗电有点快了,所以关闭了手机里面的一些设置,将续航时间大幅延长,很多用旧华为手机的朋友也说这些方法 ...

  5. golang defer实现

    golang defer实现 1.现象 defer 会在函数return前执行 如果发生非系统级别panic,defer依然执行:在defer执行过程中,如果有recover,那就捕获panic,否则 ...

  6. golang defer 关闭文件 报错file may have nil or other unexpected value as its corresponding error

    错误实例: file, err := os.Open("xxx.txt") defer file.Close() if err != nil {return err } 初学者很多 ...

  7. golang defer简介 goland 警告提示 possible resource leak,difer is called in a for loop 原因

    目录 警告原因 解决方法 defer理解 defer调用是一个栈结构 defer的作用域是一个函数,不是一个语句块 链式调用 针对非指针类型调用函数 警告原因 在for中使用defer关闭资源,其实资 ...

  8. Golang defer解读

    defer defer是Go语言提供的一种用于注册延迟调用的机制:让函数或语句可以在当前函数执行完毕后(包括通过return正常结束或者panic导致的异常结束)执行. defer语句通常用于一些成对 ...

  9. golang defer的使用

    在golang当中,defer代码块会在函数调用链表中增加一个函数调用.这个函数调用不是普通的函数调用,而是会在函数正常返回,也就是return之后添加一个函数调用.因此,defer通常用来释放函数内 ...

最新文章

  1. 杭电多校第四场-H- K-th Closest Distance
  2. 何李石:七牛直播云技术详解
  3. SpringBoot学习系列之一
  4. shell 脚本比较字符串相等_shell字符串比较判断是否为数字
  5. winserver下oracle好运维吗,在Windows 客户端下备份远程Linux服务器上的Oracle数据库...
  6. 阿里云 AI 编辑部获 CCBN 创新奖,揭秘传媒行业解决方案背后的黑科技
  7. 简单的python下载器
  8. python-玉米(小米)商城作业
  9. 环境搭建:Windows系统下Nacos集群搭建
  10. 28. magento使用细节
  11. 最详细最好的Multisim模拟电路仿真教程(附视频教程)
  12. Ios html5游戏存档,ios存档怎么安装 不用电脑安装IOS存档图文教程
  13. AndroidStudio配置夜神模拟器
  14. 踏歌黑名单工具类DEMO(AUB)
  15. 搞个大点的 某团购App mtgsig
  16. 你知道豆瓣电影是怎么评分的吗?(实战篇—手把手教你分析豆瓣电影)
  17. 腾讯云服务器评测:配置 8核 16G 18M 带宽
  18. 给大家分享一下指纹挂锁的方案
  19. virbr0怎么关闭_kvm虚拟化关闭虚拟网卡virbr0的方法
  20. Mendix开发介绍实用篇(一)

热门文章

  1. framebuffer显示JPEG图片
  2. datagridview显示每次点击都会往后追加_R410A空调安装(或系统维修后)排空及追加制冷剂操作工艺...
  3. python连接redis有中文_Python连接Redis并操作
  4. allpairs使用方法_软件测试|正交试验测试用例设计方法
  5. cmd做个定时弹窗_揭秘200元山寨苹果耳机!一颗耳边的“定时炸弹”...
  6. php import_resource,@ImportResource
  7. 北邮计算机发展,北邮计算机学科前景怎样?升学就业如何?26日教授亲自来解读...
  8. linux下,每次git pull 或者git push都需要输入账号密码的问题以及git remote 的一些基本操作
  9. python【力扣LeetCode算法题库】220-存在重复元素 III
  10. ldap 高级查询 禁用_化妆水有治疗耳部疾患、痔疮等11大功效?专家表示或含禁用物质...