亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在函數失敗時刪除文件

在函數失敗時刪除文件

Go
泛舟湖上清波郎朗 2022-08-30 15:10:31
如果我運行此代碼: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)

   }

}


查看完整回答
反對 回復 2022-08-30
  • 1 回答
  • 0 關注
  • 90 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號