在程序执行过程中,我们经常需要创建一些在程序退出后不再需要的数据。临时文件和目录非常适合这种用途,因为它们不会随着时间的推移污染文件系统。
package main
import (
"fmt"
"os"
"path/filepath"
)
func check(e error) {
if e != nil {
panic(e)
}
}
func main() {
// 创建临时文件最简单的方法是调用 os.CreateTemp。它会创建一个文件并打开它以进行读写。我们提供 "" 作为第一个参数,因此 os.CreateTemp 会在操作系统的默认位置创建文件。
f, err := os.CreateTemp("", "sample")
check(err)
// 显示临时文件的名称。在基于 Unix 的操作系统上,目录通常是 /tmp。文件名以 os.CreateTemp 的第二个参数作为前缀,其余部分会自动生成,以确保并发调用时始终创建不同的文件名。
fmt.Println("Temp file name:", f.Name())
// 在我们完成操作后清理文件。操作系统可能会在一段时间后自动清理临时文件,但显式地执行清理是一个良好的实践。
defer os.Remove(f.Name())
// 我们可以向文件中写入一些数据。
_, err = f.Write([]byte{1, 2, 3, 4})
check(err)
// 如果我们打算写入许多临时文件,可能更倾向于创建一个临时目录。os.MkdirTemp 的参数与 CreateTemp 相同,但它返回的是目录名而不是打开的文件。
dname, err := os.MkdirTemp("", "sampledir")
check(err)
fmt.Println("Temp dir name:", dname)
defer os.RemoveAll(dname)
// 现在,我们可以通过在临时目录前添加前缀来合成临时文件名。
fname := filepath.Join(dname, "file1")
err = os.WriteFile(fname, []byte{1, 2}, 0666)
check(err)
}运行结果:
➜ go run temporary-files-and-directories/temporary-files-and-directories.go
Temp file name: /var/folders/rz/5ypggxrj4tn_2wxyt7qdl0vc0000gn/T/sample2532823430
Temp dir name: /var/folders/rz/5ypggxrj4tn_2wxyt7qdl0vc0000gn/T/sampledir237796201原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。