|
Durante l’esecuzione del programma, spesso vogliamo creare
dati che non sono necessari dopo l’uscita del programma.
File e directory temporanei sono utili per questo
scopo poiché non inquinano il file system nel
tempo.
|
|
|
|

package main
|
|
|
import (
"fmt"
"os"
"path/filepath"
)
|
|
|
func check(e error) {
if e != nil {
panic(e)
}
}
|
|
|
func main() {
|
|
Il modo più semplice per creare un file temporaneo è
chiamare os.CreateTemp. Crea un file e
lo apre per lettura e scrittura. Forniamo ""
come primo argomento, così os.CreateTemp
creerà il file nella posizione predefinita per il nostro OS.
|
f, err := os.CreateTemp("", "sample")
check(err)
|
|
Mostra il nome del file temporaneo. Sui
sistemi operativi Unix la directory sarà probabilmente /tmp.
Il nome del file inizia con il prefisso dato come
secondo argomento a os.CreateTemp e il resto
viene scelto automaticamente per assicurare che chiamate
concorrenti creino sempre nomi di file diversi.
|
fmt.Println("Temp file name:", f.Name())
|
|
Puliamo il file dopo aver finito. Il sistema operativo
probabilmente pulirà i file temporanei da solo dopo
un po’ di tempo, ma è buona pratica farlo
esplicitamente.
|
defer os.Remove(f.Name())
|
|
Possiamo scrivere alcuni dati nel file.
|
_, err = f.Write([]byte{1, 2, 3, 4})
check(err)
|
|
Se intendiamo scrivere molti file temporanei, potremmo
preferire creare una directory temporanea.
Gli argomenti di os.MkdirTemp sono gli stessi di
CreateTemp, ma restituisce un nome di directory
piuttosto che un file aperto.
|
dname, err := os.MkdirTemp("", "sampledir")
check(err)
fmt.Println("Temp dir name:", dname)
|
|
|
defer os.RemoveAll(dname)
|
|
Ora possiamo sintetizzare nomi di file temporanei
prefissandoli con la nostra directory temporanea.
|
fname := filepath.Join(dname, "file1")
err = os.WriteFile(fname, []byte{1, 2}, 0666)
check(err)
}
|