Во время выполнения программы мы часто хотим создавать
данные, которые не нужны после выхода из программы.
Временные файлы и каталоги полезны для этой цели,
поскольку они не загрязняют файловую систему с
течением времени.
|
|
|
|
|
import (
"fmt"
"io/ioutil"
"os"
"path/filepath"
)
|
|
func check(e error) {
if e != nil {
panic(e)
}
}
|
|
|
Простейший способ создания временного файла - это
вызов ioutil.TempFile . Он создаст и откроет
файл для чтения и записи. Мы использовали "" в
качестве первого аргумента, и поэтому ioutil.TempFile
создаст файл в директории по-умолчанию.
|
f, err := ioutil.TempFile("", "sample")
check(err)
|
Показать имя временного файла. В ОС на основе Unix
каталог, вероятно, будет /tmp . Имя файла начинается
с префикса, заданного в качестве второго аргумента
ioutil.TempFile , а остальное выбирается автоматически,
чтобы параллельные вызовы всегда создавали разные
имена файлов.
|
fmt.Println("Temp file name:", f.Name())
|
Удалите файл после того, как мы закончим. Через
некоторое время ОС, скорее всего, сама очистит
временные файлы, но рекомендуется делать это явно.
|
defer os.Remove(f.Name())
|
Мы можем записать какую-то информацию в файл.
|
_, err = f.Write([]byte{1, 2, 3, 4})
check(err)
|
Если мы намереваемся написать много временных файлов,
мы можем предпочесть создать временный каталог. Аргументы
ioutil.TempDir совпадают с аргументами 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)
}
|