Closed TanHaodong closed 2 years ago
为啥在不判断OpenFile的返回值的情况下就调用defer f.Close呢?能说说你的理由不?
为啥在判断OpenFile的返回值的情况下就调用defer f.Close呢?能说出你的不?
在博客圆:https://www.cnblogs.com/sinclairni/p/15126506.html。以前好像在那个视频里也看到过。return之后,会发生泄露。defer 没有出栈吧。能详细讲下吗?自己学的知识深度不够
OpenFile调用返回失败时,说明文件打开并没有成功,即文件描述符等资源并没有申请成功,所以不存在泄露问题。
谢谢
问题在:deferred_func_2.go 原文: f, err := os.OpenFile(fname, os.O_RDWR, 0666) if err != nil { return err } defer f.Close()
改后: f, err := os.OpenFile(fname, os.O_RDWR, 0666) defer f.Close() // 这里 if err != nil { return err }