在函数失败时删除文件

如果我运行此代码:


package main

import "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()


泛舟湖上清波郎朗
浏览 73回答 1
1回答

慕斯709654

如果这种情况经常出现,请创建一个帮助程序函数: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)   }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go