Докато програмата ни се изпълнява, често ни се налага да създаваме данни, който след приключването ѝ не са ни нужни повече. Временните файлове и папки вършат добра работа в този случай, понеже не се натрупват с времето и не замърсяват.
import (
"fmt"
"os"
"path/filepath"
)
func check(e error) {
if e != nil {
panic(e)
}
}
func main() {
Най-лесният начин за създаване на временен файл е чрез извикване на
функцията os.CreateTemp. Тя създава файл и го отваря за писане и
четене. Ние предоставяме първо "", така че os.CreateTemp да създаде
файла във временната папка по подразбиране за нашата работна уредба (РУ)1.
f, err := os.CreateTemp("", "примѣр")
check(err)
Показваме името на временния файл. При РУ основани на Юникс папката
обикновено е /tmp. Името на файла започва с второ-подадената на
os.CreateTemp представка, а остатъкът от името бива избран
автоматично, за да може едновременните извиквания да създават винаги
файлове с различни имена.
fmt.Println("Име на временния файл:", f.Name())
Премахваме временния файл, след като приключим. Обикновено РУ сама почиства от временни файлове след известно време, но е добър навик да го правим изрично.
defer os.Remove(f.Name())
Можем да запишем малко данни във файла.
_, err = f.Write([]byte{1, 2, 3, 4})
check(err)
Ако възнамеряваме да създадем много временни файлове, можем да си
създадем временна папка. Податките за os.MkdirTemp са същите като за
CreateTemp, но os.MkdirTemp връща името на папката вместо име на
отворен файл.
dname, err := os.MkdirTemp("", "примѣрнапапка")
check(err)
fmt.Println("Име на временна папка:", 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
Име на временния файл: /tmp/примѣр3128158633
Име на временна папка: /tmp/примѣрнапапка2147354413
Следващ пример: Директивата Embed.