golang defer使用——资源关闭时候多用
2024-09-07 01:50:51
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
最新文章
- hdu 2159 FATE
- 03_Java面向对象特征: 封装性
- 【Linux命令与工具】ps命令
- Sql-oracle and sqlserver differences
- C语言字符串处理
- swift-网络请求
- Active Record快速入门指南
- ASP。net中如何在一个按钮click事件中调用另一个按钮的click事件
- OpenRisc-47-or1200的WB模块分析
- python下使用protobuf
- 浏览器Agent大全 (含IE 11, Edge)
- 基于JavaMail向邮箱发送邮件
- MySQL数据库存储过程动态表建立(PREPARE)
- 关于linux音频指南
- FCC(ES6写法) Friendly Date Ranges
- vs 快捷操作
- unigui ShowModal、MessageDlg
- A. Chess Placing
- SQL审计 Yearning 介绍(SQL审核平台)
- C# 全屏坐标及区域坐标获取。自定义光标及系统光标描边捕捉显示。