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

Далее: .