Ce face os.MkdirTemp
os.MkdirTemp creează un director cu un nume care nu se repetă, potrivit pentru fișiere de lucru: descărcări parțiale, conversii, teste. Numele se formează din pattern: dacă acesta conține *, partea aleatorie înlocuiește ultima steluță; altfel se adaugă la final.
Dacă dir este "", directorul se creează în directorul temporar al sistemului (os.TempDir()). Go nu șterge singur directorul: apelează defer os.RemoveAll(cale) imediat după creare.
Parametri
| Parametru | Descriere |
|---|---|
dir |
Directorul în care se creează; "" = directorul temporar al sistemului. |
pattern |
Modelul numelui, de exemplu "raport-*". |
Ce returnează
Calea directorului creat și nil, sau o eroare.
Exemple
Exemplul 1: Director de lucru șters la final
Numele conține o parte aleatorie, deci nu îl afișăm întreg; verificăm doar prefixul.
package main
import (
"fmt"
"os"
"path/filepath"
"strings"
)
func main() {
dir, err := os.MkdirTemp("", "conversie-*")
if err != nil {
fmt.Println("eroare:", err)
return
}
defer os.RemoveAll(dir) // curățăm la final
fisier := filepath.Join(dir, "pagina1.txt")
os.WriteFile(fisier, []byte("text convertit"), 0o644)
date, _ := os.ReadFile(fisier)
fmt.Println("prefix corect:", strings.HasPrefix(filepath.Base(dir), "conversie-"))
fmt.Println("conținut:", string(date))
}
Rezultat
prefix corect: true
conținut: text convertit
Exemplul 2: Ce cale primești
Calea diferă la fiecare rulare și de la un sistem la altul (pe macOS directorul temporar este sub /var/folders, pe Linux de obicei /tmp).
package main
import (
"fmt"
"os"
)
func main() {
dir, _ := os.MkdirTemp("", "dexblog-*")
defer os.RemoveAll(dir)
fmt.Println(dir)
local, _ := os.MkdirTemp(".", "lucru-")
defer os.RemoveAll(local)
fmt.Println(local)
}
Rezultat posibil (diferă la fiecare rulare)
/tmp/dexblog-2841963705
./lucru-1180594732
Greșeli frecvente
- Uiți să ștergi directorul. Directoarele temporare se adună; pune
defer os.RemoveAll(dir)imediat după verificarea erorii. - Pui un separator de cale în
pattern("a/b-*"). Funcția dă eroare; directorul părinte se dă îndir.
Comenzi înrudite
os.TempDir: Returnează directorul pentru fișiere temporare al sistemului (de obicei /tmp pe Linux).os.RemoveAll: Șterge un fișier sau un director cu tot conținutul lui; nu dă eroare dacă nu există.os.Mkdir: Creează un singur director nou; dă eroare dacă există deja sau dacă directorul părinte lipsește.testing.T.TempDir: Creează un director temporar nou pentru test și îl șterge automat când testul se termină.os.CreateTemp: Creează și deschide un fișier temporar nou, cu nume unic, și îl returnează ca *os.File.