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

简介:

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









本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/bonelee/p/6582277.html,如需转载请自行联系原作者



相关文章
|
1月前
|
Go
Go语言中defer的执行顺序详解
【2月更文挑战第22天】
26 4
|
5月前
|
Cloud Native Go
GO 中的 defer 有哪些注意事项?上
GO 中的 defer 有哪些注意事项?上
|
6月前
|
Go
Go语言编程的一大杀器!详解defer语句
Go语言编程的一大杀器!详解defer语句
28 0
|
6月前
|
安全 Go
Golang 语言中的 defer 怎么使用?
Golang 语言中的 defer 怎么使用?
29 0
|
3月前
|
Java Go
浅谈Golang 不同版本的defer
浅谈Golang 不同版本的defer
27 1
|
3月前
|
存储 编译器 测试技术
Golang底层原理剖析之defer
Golang底层原理剖析之defer
15 0
|
3月前
|
网络协议 BI Go
Go-异常处理(defer recover panic)
Go-异常处理(defer recover panic)
30 0
|
4月前
|
Go
go defer用法_类似与python_java_finially
go defer用法_类似与python_java_finially
36 0
|
5月前
|
Cloud Native Go C++
GO 中的 defer 有哪些注意事项?下
GO 中的 defer 有哪些注意事项?下
|
5月前
|
存储 Java 编译器
GO 中 defer的实现原理
GO 中 defer的实现原理