Go 写入不存在的文件没有错误?

Go 写入不存在的文件没有错误?,go,Go,如果在写入之前删除文件,为什么f.Write()不会返回任何错误 package main import ( "fmt" "os" "time" ) func main() { f, err := os.Create("foo") if err != nil { panic(err) } if err := os.Remove("foo"); err != nil { panic(err) }

如果在写入之前删除文件,为什么
f.Write()
不会返回任何错误

package main

import (
    "fmt"
    "os"
    "time"
)

func main() {
    f, err := os.Create("foo")
    if err != nil {
        panic(err)
    }

    if err := os.Remove("foo"); err != nil {
        panic(err)
    }

    if _, err := f.Write([]byte("hello")); err != nil {
        panic(err) // would expect panic here
    }

    fmt.Println("no panic?")
}

显然这是意料之中的事

当您删除一个文件时,实际上删除了指向该文件(inode)的链接。如果有人已经打开了该文件,他们可以保留他们拥有的文件描述符。该文件保留在磁盘上,占用空间,如果您有权访问它,则可以对其进行写入和读取


资料来源:

请参阅:这是有道理的。还发现:这将在Windows上表现不同。我认为移除会失败。@kostya是的,它会失败。您将获得
panic:remove foo:该进程无法访问该文件,因为它正被另一个进程使用。