为了账号安全,请及时绑定邮箱和手机立即绑定

在函数失败时删除文件

在函数失败时删除文件

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 关注
  • 72 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信