在golang中,移动打开的文件是否会导致泄漏或任何其他问题?

在golang中,移动打开的文件是否会导致泄漏或任何其他问题?,go,operating-system,file-descriptor,Go,Operating System,File Descriptor,考虑以下代码: f, err := os.Create(tmpFilepath) defer f.Close() // do some writing to f os.Rename(tmpFilepath, newpath) 已删除一些错误处理以简化 此外,我知道这段代码是错误的,但我试图理解这段代码对文件的正确性和性能的影响 这里有资源泄漏吗 顺便说一句,修复方法是在完成对文件的写入后关闭。如果我们讨论的是实现POSIX语义的操作系统和文件系统(也就是说,不是通常不允许您重命名打开的文件的W

考虑以下代码:

f, err := os.Create(tmpFilepath)
defer f.Close()
// do some writing to f
os.Rename(tmpFilepath, newpath)
已删除一些错误处理以简化

此外,我知道这段代码是错误的,但我试图理解这段代码对文件的正确性和性能的影响

这里有资源泄漏吗


顺便说一句,修复方法是在完成对文件的写入后关闭。

如果我们讨论的是实现POSIX语义的操作系统和文件系统(也就是说,不是通常不允许您重命名打开的文件的Windows),则绝对没有问题:打开的文件描述符只算作指向文件数据的硬链接

< >重命名文件的数据并没有从打开的文件描述符中分离出来,将后者视为对该数据的一种“匿名”引用。

引用:

如果文件的链接计数为0,则当与该文件关联的所有文件描述符都关闭时,该文件占用的空间将被释放,并且该文件将不再可访问


除了无缘无故地重命名正在写入的文件会让人感到困惑之外,这里还有什么错?这会泄漏什么?移动一个开放的写文件可以吗?移动后,进程是否能够关闭它?所有内容都正确写入新目标吗?