Go中创建临时文件的方法

2,456 阅读2分钟

当您编写一个处理大量数据的程序时,或者您测试一个创建文件的程序时,您经常需要创建临时文件的能力,使您能够在短时间内存储数据,而不会使项目的磁盘空间变得混乱。在Go中,你可以用以下方法创建临时文件 os.CreateTemp()函数创建一个临时文件,并通过以下函数创建一个临时目录 os.MkdirTemp()函数。

os.CreateTemp()os.MkdirTemp()从Go 1.17开始就有了。对于旧版本,您可以使用 ioutil.TempFile()ioutil.TempDir().

创建一个临时文件

package main
import (
"log"
"os"
)
func main() {
// create and open a temporary file
f, err := os.CreateTemp("", "tmpfile-") // in Go version older than 1.17 you can use ioutil.TempFile
if err != nil {
log.Fatal(err)
}
// close and remove the temporary file at the end of the program
defer f.Close()
defer os.Remove(f.Name())
// write data to the temporary file
data := []byte("abc abc abc")
if _, err := f.Write(data); err != nil {
log.Fatal(err)
}
}

该函数 func CreateTemp(dir, pattern string) (*File, error)有两个参数:

  • dir 是一个应该创建临时文件的目录。如果留空,则使用临时文件的默认目录(对于一个给定的操作系统)。
  • pattern 这是用于生成临时文件的名称。该名称是通过在模式的末尾附加一个随机字符串来创建的。通过这种方式,在例子中,我们得到的名字是: 。你也可以使用 来指示随机字符串应该放在哪里。给予 ,你会得到,例如 。tmpfile-483140887 * tmpfile-*.txt tmpfile-483140887.txt

如果你不再使用这个临时文件,最好的做法是用 os.Remove().

创建一个临时目录

package main
import (
"fmt"
"log"
"os"
)
func main() {
// create a temporary directory
name, err := os.MkdirTemp("", "dir") // in Go version older than 1.17 you can use ioutil.TempDir
if err != nil {
log.Fatal(err)
}
// remove the temporary directory at the end of the program
defer os.RemoveAll(name)
// print path of the directory
fmt.Println(name)
}

函数的参数 func MkdirTemp(dir, pattern string) (string, error)函数的工作方式与 os.CreateTemp().和以前一样,在你完成对临时文件夹的处理后,你应该记得删除它,例如,通过 os.RemoveAll.