在程序执行过程中,我们经常需要创建一些在程序退出后不再需要的数据。临时文件和目录对于此目的非常有用,因为它们不会随着时间的推移而污染文件系统。
|
|
|
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)
}
|