// 在整个程序执行过程中,经常需要创建程序退出后不需要的数据 // 临时文件和目录对此非常有用,因为它们不会随着时间的推移而污染文件系统 package main import ( "fmt" "io/ioutil" "os" "path/filepath" ) func check(err error) { if err != nil { panic(err) } } func main() { // 创建临时文件的最便捷的方式就是调用ioutil.TempFile函数 // 它创建一个文件并打开它进行读写 // 给ioutil.TempFile函数传递的一个参数是空字符串,所以会操作系统的默认位置创建文件 f, err := ioutil.TempFile("", "sample") check(err) // 在类Unix操作系统上,目录可能是/tmp // 文件名以ioutil.TempFile的第二个参数作为前缀, // 其余部分自动选择以确保并发调用将始终创建不同的文件名。 fmt.Println("Temp file name", f.Name()) // 文件使用完成后清理文件, // 操作系统也可能在一段时间后自动清理临时文件 // 显式的执行清理操作是一个最佳实践 defer os.RemoveAll(f.Name()) // 向临时文件中写入一些数据 _, err = f.Write([]byte{1, 2, 3, 4}) check(err) // 如果要创建多个临时文件,可以先创建一个临时目录 // ioutil.TempDir的参数与ioutil.TempFIle的参数相同 // 只是返回的是目录名而不是一个文件名 dname, err := ioutil.TempDir("", "sampledir") fmt.Println("Temp dir name", dname) defer os.RemoveAll(dname) // 可以通过在临时目录前添加前缀来合成临时文件名。 fname := filepath.Join(dname, "file1") err = ioutil.WriteFile(fname, []byte{1, 2}, 0666) check(err) }