os.MkdirTemp în Go

Creează un director temporar nou, cu nume unic, și returnează calea lui.

Sintaxă
func MkdirTemp(dir, pattern string) (string, error)

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ă în dir.

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.