美文网首页
golang defer避免资源泄漏

golang defer避免资源泄漏

作者: 追梦人在路上不断追寻 | 来源:发表于2020-08-29 23:53 被阅读0次

写过c语言的同学都知道,如果稍加不小心,我们就会造成资源内存的泄漏,如果在golang语言中避免这个问题呢?或者说减少资源泄露的可能性?答案就是defer.

在打开资源语句的下一行,就可以直接用 defer语句来注册函数结束后执行关闭资源的操作。比如数据库连接、文件、锁等,这些资源需要在用完之后释放掉,否则会造成内存泄漏。我们就可以在打开之后,使用defer避免资源泄漏。

f, err :=os.Open(filename)

if err != nil{
    panic(err)
}

if f != nil{
    defer f.Close()
}

原理

每次defer语句执行的时候,会把函数“压栈”,函数参数会被拷贝下来;当外层函数(非代码块,如一个for循环)退出时,defer函数按照定义的逆序执行;如果defer执行的函数为nil, 那么会在最终调用函数的产生panic.

相关文章

  • golang defer避免资源泄漏

    写过c语言的同学都知道,如果稍加不小心,我们就会造成资源内存的泄漏,如果在golang语言中避免这个问题呢?或者说...

  • Golang之Defer

    引用 golang defer实现原理 Golang之轻松化解defer的温柔陷阱 Golang中defer、re...

  • 2017-12-04

    Golang,Panic,Defer,Recover 在golang中,recover在defer里发挥作用。 一...

  • Golang defer总结

    0 Golang有一个特殊的控件语句,那就是defer,defer语句用于延迟调用指定的函数,比如释放资源等,它会...

  • go defer理解

    golang的defer是怎么工作的?defer在golang里是一个很基础的关键字,在函数内部使用defer声明...

  • golang 模拟defer准确的释放一个对象中的大量资源(更新

    golang 模拟defer准确的释放一个对象中的大量资源 更新记录:2018-4-19:重写destroyer....

  • golang中defer执行时机与常见问题

    defer是什么? defer的用途 defer的执行时机 了解defer的执行时机首先要知道golang的ret...

  • More_Effective_C++_笔记_103

    异常(exception) 条款09 利用 destructors 避免泄漏资源 即避免裸指针的使用, 将指针包装...

  • 聊聊golang的defer

    序 本文主要研究一下golang的defer defer return先赋值(对于命名返回值),然后执行defer...

  • 12 Golang defer panic recover

    defer Golang中的defer会将其后面跟随的语句进行延迟处理。在defer归属的函数即将返回时,将延迟处...

网友评论

      本文标题:golang defer避免资源泄漏

      本文链接:https://www.haomeiwen.com/subject/ivdssktx.html