如果我運(yùn)行此代碼: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) } }}我得到這個(gè)結(jié)果:The process cannot access the file because it is being used by another process.如果我這樣做,我會(huì)得到預(yù)期的結(jié)果:defer f.Close()if ! pass() { f.Close() e := os.Remove("file.txt") if e != nil { panic(e) }}但如果可能的話,我想避免重復(fù)。該文件始終需要關(guān)閉,但如果某些功能失敗,也需要?jiǎng)h除該文件。是否有更好的方法可用于我正在嘗試做的事情?響應(yīng)注釋:文件將從多個(gè) HTTP 請(qǐng)求寫(xiě)入。第一個(gè)請(qǐng)求可能通過(guò),第二個(gè)請(qǐng)求失敗。Close()
1 回答

慕斯709654
TA貢獻(xiàn)1840條經(jīng)驗(yàn) 獲得超5個(gè)贊
如果這種情況經(jīng)常出現(xiàn),請(qǐng)創(chuàng)建一個(gè)幫助程序函數(shù):
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 關(guān)注
- 92 瀏覽
添加回答
舉報(bào)
0/150
提交
取消