七叶笔记 » golang编程 » golang — defer相关

golang — defer相关

示例

 package main

import "fmt"

func main() {
    defer fmt.Printf("show defer 1\n")
    defer fmt.Printf("show defer 2\n")
    fmt.Printf("normal show\n")
}  

运行结果

 normal show
show defer 2
show defer 1  

作用

延迟 defer之后的fmt.Printf(“show defer\n”)函数在main()函数中的运行,也即决定了函数运行的 时机

什么时候执行

defer所在函数中return语句执行之后

使用注意:

  1. defer必须定义在所在函数中return语句或os.Exit()/panic()函数之前,不然会导致defer之后的函数不会执行
  2. 定义多个defer表达式后,按照先进后出的方式执行,即先定义的后执行,如示例中两个defer表达式
  3. defer声明时如果延迟调用的函数中有变量x则按照声明时x的值来真正执行defer语句

使用场景

  1. 释放已打开文件资源
  2. 关闭socket网络连接
  3. 关闭数据库连接
  4. 释放锁资源

其他defer的使用见:

相关文章