zoukankan      html  css  js  c++  java
  • GO学习笔记:函数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)

      }

      (编辑:雷林鹏 来源:网络)

  • 相关阅读:
    什么是函数式编程
    红包算法
    laravel中查看执行的SQL语句
    身份证号信息后台匹配
    在函数内部访问外部的变量
    设计模式-观察者模式
    laravel查询构造器操作数据库
    linux根目录文件夹的作用
    关于laravel连接数据库报错
    设定起始日期,遍历到今天的日期
  • 原文地址:https://www.cnblogs.com/pengpeng1208/p/9719119.html
Copyright © 2011-2022 走看看