zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    怎样评价聚类结果好坏?
    libsvm 用在 婚介数据集中 预测 用户配对
    mac 常用操作
    mac 安装 tomcat 配置
    mac 安装 maven 配置
    mac 安装 java 配置
    mac 安装 photoshop CS6
    mac 应用程序安装目录
    JavaScript、ES5和ES6的介绍和区别
    css 两列自适应布局的4种思路
  • 原文地址:https://www.cnblogs.com/bonelee/p/6582277.html
Copyright © 2011-2022 走看看