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

最新文章

  1. hdu 2159 FATE
  2. 03_Java面向对象特征: 封装性
  3. 【Linux命令与工具】ps命令
  4. Sql-oracle and sqlserver differences
  5. C语言字符串处理
  6. swift-网络请求
  7. Active Record快速入门指南
  8. ASP。net中如何在一个按钮click事件中调用另一个按钮的click事件
  9. OpenRisc-47-or1200的WB模块分析
  10. python下使用protobuf
  11. 浏览器Agent大全 (含IE 11, Edge)
  12. 基于JavaMail向邮箱发送邮件
  13. MySQL数据库存储过程动态表建立(PREPARE)
  14. 关于linux音频指南
  15. FCC(ES6写法) Friendly Date Ranges
  16. vs 快捷操作
  17. unigui ShowModal、MessageDlg
  18. A. Chess Placing
  19. SQL审计 Yearning 介绍(SQL审核平台)
  20. C# 全屏坐标及区域坐标获取。自定义光标及系统光标描边捕捉显示。

热门文章

  1. Codeforces 432D Prefixes and Suffixes kmp
  2. MySql的架构和历史
  3. luogu P1351 联合权值
  4. codeforces 946G
  5. 从Java看数据结构之——树和他的操作集
  6. Java网络编程之InetAddress和URL
  7. 推荐几款屏幕录制工具(可录制GIF)
  8. 在matlab中对中国地图中的不同省份按照高度进行渲染
  9. [转] SQL Server中变量的声明和使用方法
  10. Delphi GDI对象之绘制文本