Go 示例: 临时文件和目录

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

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.go
Temp file name: /tmp/sample610887201
Temp dir name: /tmp/sampledir898854668

下一个示例:嵌入指令.