Avatar ·

如何检查文件在Go中是否存在?(避免多余的数据竞争)

大家好!我刚开始学习Go,遇到了一个看似简单的任务:在读取或写入文件之前,需要检查文件是否存在于磁盘上。在Python中,我习惯这样做: ```go import os if os.path.exists("myfile.txt"): print("文件存在") ``` 但在Go中,我没有找到这么简单的函数。`os`包的文档中有`Stat()`函数,如果文件不存在会返回一个错误。我写了这样的代码: ```go package main import ( "fmt" "os" ) func main() { _, err := os.Stat("myfile.txt") if err != nil { if os.IsNotExist(err) { fmt.Println("文件不存在") } else { fmt.Println("发生了其他错误:", err) } } else { fmt.Println("文件存在") } } ``` 看起来能工作,但我困惑的是,Go的文档中经常提到,在读取/写入之前检查存在性是一种反模式,因为在检查和操作之间