美文网首页Golang进阶
【Golang】golang中使用defer关闭file句柄总是

【Golang】golang中使用defer关闭file句柄总是

作者: qishuai | 来源:发表于2017-04-21 10:52 被阅读23次

实例:

file, err := os.Open("writeAt.txt")
if err != nil {
    panic(err)
}
defer file.Close()

查看源码发现,go标准包中,如果打开文件出错,将返回nil的文件类型,而nil类型的变量调用Close()方法时本身会发生panic。源码:

 func OpenFile(name string, flag int, perm FileMode) (*File, error) {
    if name == "" {
    return nil, &PathError{"open", name, syscall.ENOENT}
    }
    r, errf := openFile(name, flag, perm)
    if errf == nil {
      return r, nil
    }
    r, errd := openDir(name)
    if errd == nil {
    if flag&O_WRONLY != 0 || flag&O_RDWR != 0 {
        r.Close()
        return nil, &PathError{"open", name, syscall.EISDIR}
    }
    return r, nil
    }
    return nil, &PathError{"open", name, errf}
  }

相关文章

  • 【Golang】golang中使用defer关闭file句柄总是

    实例: 查看源码发现,go标准包中,如果打开文件出错,将返回nil的文件类型,而nil类型的变量调用Close()...

  • Golang之Defer

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

  • 2017-12-04

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

  • go defer理解

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

  • golang中defer使用小结

    golang语言中defer的使用场景较多,用于锁的关闭,连接的延迟关闭等,通常在函数的结束时调用,详细的讲就是在...

  • golang中defer的使用

    在golang当中,defer代码块会在函数调用链表中增加一个函数调用。这个函数调用不是普通的函数调用,而是会在函...

  • golang记录

    获取本地IP 限制golang最大并发数 golang最快响应伪代码如下 反射修改对象属性 关于defer中坑的最...

  • 12 Golang defer panic recover

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

  • golang 延时函数defer 作final处理文件或异常

    golang 延时函数defer 作final处理文件或异常defer 函数先进后出原则,在函数内部使用时,会在r...

  • GO中defer关键字

    defer关键字在go中用于return之前执行,在golang官方文档中有说明。defer的用法类似java中的...

网友评论

    本文标题:【Golang】golang中使用defer关闭file句柄总是

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