如果我運行此代碼: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 關注
- 90 瀏覽
添加回答
舉報
0/150
提交
取消