Golang defer运用规则

1.是什么defer

是Go语言提供的一种用于注册延迟调用的机制:让函数或语句可以在当前函数执行完毕后(包括通过return正常结束或者panic导致的异常结束)执行。

defer通常运用在 打开/关闭连接,加锁/释放锁,打开/关闭文件。

2.为什么要用defer

我们在编程的时候经常会使用到一些外部的资源,比如文件、连接、锁 等,使用defer关闭这些资源避免可能造成的一些内存泄露的问题。

3.怎么用defer

demo1:

func hello(i int) {  
    fmt.Println(i)
}

func main() {  
    i := 5
    defer hello(i)
    i = i + 10
}

demo2:

func main() {
    defer_call()
}

func defer_call()  {
    defer func() {fmt.Println("打印前")}()
    defer func() {fmt.Println("打印中")}()
    defer func() {fmt.Println("打印后")}()

    panic("触发异常")
}

思考上面代码输出内容?

defer中有几点需要注意的是:

  1. return后面的defer是不会执行的
  2. defer打印是先进后出,出现panic之后会先执行完defer再执行panic
  3. defer在函数中的情况下 ,在函数执行之前会被执行 ,defer fun1(..fun2) func2会先执行 后面再执行func1

猜你喜欢

转载自blog.csdn.net/coffiasd/article/details/114261584
今日推荐