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)

      }

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

  • 相关阅读:
    169. Majority Element
    283. Move Zeroes
    1331. Rank Transform of an Array
    566. Reshape the Matrix
    985. Sum of Even Numbers After Queries
    1185. Day of the Week
    867. Transpose Matrix
    1217. Play with Chips
    766. Toeplitz Matrix
    1413. Minimum Value to Get Positive Step by Step Sum
  • 原文地址:https://www.cnblogs.com/pengpeng1208/p/9719119.html
Copyright © 2011-2022 走看看