Опубликовано: 27 февраля 2023 г. 14:36 | Автор: echodiv | Категория: Разработка | 👁 548

Создание временного файла и временной директории в Golang

Go в своей стандартной библиотеке предоставляет инструменты для создания временного файла и временной директории. Для этого можно использовать пакет "os", в котором есть функции MkdirTemp и CreateTemp. Но для удаления временного файла и директории нужно явно указать их удаление для этого можно использовать os.RemoveAll и os.Remove соответственно.

 

Для начала рассмотрим создание временного файла

package main
 
import (
    "log"
    "os"
    "os/signal"
)
 
func main() {
    f, err := os.CreateTemp("tmp/example/", "file.*.tmp")
    if err != nil {
        log.Fatal(err)
    }
 
    defer os.Remove(f.Name())
    defer f.Close()       data := []byte("Hello file!")     if _, err := f.Write(data); err != nil {         log.Fatal(err)     }       c := make(chan os.Signal, 1)     signal.Notify(c, os.Interrupt)     <- c }

 

Здесь создаётся временный файл, для этого используется os.CreateTempкоторая принимает директорию в которой будет создан файл и имя файла. Имя файла "солится" случайной строкой. По умолчанию случайная часть добавляется в конец файла, но ей можно управлять указывая специальный символ "*", на месте которого она и окажется.

Сразу после создания файла не забудем прописать в defer закрытие файла и его удаление.

В конце примера остановимся, чтобы посмотреть что находится в указанной директории. file.2974259792.tmp).

 

Далее рассмотрим пример с созданием временого каталога (директории)

package main
 
import (
    "log"
    "os"
    "os/signal"
)
 
func main() {
    name, err := os.MkdirTemp("/tmp/", "example")
    if err != nil {
        log.Fatal(err)
    }
 
    defer os.RemoveAll(name)
 
    c := make(chan os.Signal, 1)
    signal.Notify(c, os.Interrupt)
    <- c
}

В данной ситуации код говорит сам за себя. Всё предельно просто.