如果我运行此代码:package mainimport "os"func pass() bool { return false }func main() { f, e := os.Create("file.txt") if e != nil { panic(e) } defer f.Close() if ! pass() { e := os.Remove("file.txt") if e != nil { panic(e) } }}我得到这个结果:The process cannot access the file because it is being used by another process.如果我这样做,我会得到预期的结果:defer f.Close()if ! pass() { f.Close() e := os.Remove("file.txt") if e != nil { panic(e) }}但如果可能的话,我想避免重复。该文件始终需要关闭,但如果某些功能失败,也需要删除该文件。是否有更好的方法可用于我正在尝试做的事情?响应注释:文件将从多个 HTTP 请求写入。第一个请求可能通过,第二个请求失败。Close()
1 回答
慕斯709654
TA贡献1840条经验 获得超5个赞
如果这种情况经常出现,请创建一个帮助程序函数:
func nuke(f *os.File) {
name := f.Name()
f.Close()
if err := os.Remove(name); err != nil {
panic(err)
}
}
像这样使用它:
func main() {
f, e := os.Create("file.txt")
if e != nil {
panic(e)
}
defer f.Close()
if ! pass() {
nuke(f)
}
}
- 1 回答
- 0 关注
- 72 浏览
添加回答
举报
0/150
提交
取消