在前面的章节中,我们已经了解了基本的文件操作。当我们遇到需要手动清理,名称冲突等情况时,使用临时文件是更快,更简单的方法。

实践

1.建立temp_files.go:

package tempfiles

import (
    "fmt"
    "io/ioutil"
    "os"
)

// 这里展示了临时文件操作
func WorkWithTemp() error {
    // 如果你需要一个临时文件夹,存贮类似与template1-10.html这样的文件
    // 首个参数使用空字符串,意味着会在默认的临时目录中创建以后一个参数为开头名称的文件夹
    // 该函数实际调用了os.TempDir()
    t, err := ioutil.TempDir("", "tmp")
    if err != nil {
        return err
    }

    // 这会在整个操作完成后移除该临时文件夹及其中的所有文件
    defer os.RemoveAll(t)

    // 文件夹t必须存在否则将返回错误
    // tf是*os.File类型
    tf, err := ioutil.TempFile(t, "tmp")
    if err != nil {
        return err
    }

    fmt.Println(tf.Name())

    // 通常情况下我们在函数的最后部分删除临时文件
    // 不过通过前面的defer已经完成了这个任务

    return nil
}

2.建立main.go:

package main

import "github.com/agtorre/go-cookbook/chapter1/tempfiles"

func main() {
    if err := tempfiles.WorkWithTemp(); err != nil {
        panic(err)
    }
}

3.运行main.go,这会输出:

C:\Users\ADMINI~1\AppData\Local\Temp\tmp207945363\tmp063401686

说明

可以使用ioutil包创建临时文件和目录。 虽然你仍然需要自己删除文件,但RemoveAll会让这个操作变得非常方便。
在编写测试时,强烈建议使用临时文件。默认情况下,Go的ioutil包将尝试遵循操作系统的默认配置(或环境变量)。

最后编辑: kuteng  文档更新时间: 2021-01-03 15:03   作者:kuteng