os.Mkdir în Go

Creează un singur director nou; dă eroare dacă există deja sau dacă directorul părinte lipsește.

Sintaxă
func Mkdir(name string, perm FileMode) error

Ce face os.Mkdir

os.Mkdir creează exact un director. Directorul părinte trebuie să existe deja, iar directorul cerut să nu existe. Pentru a crea o cale întreagă (a/b/c) dintr-o dată, folosește os.MkdirAll.

Argumentul perm stabilește drepturile, de obicei 0o755 (proprietarul scrie, toți pot intra și citi). Ca la fișiere, sistemul aplică masca umask.

Parametri

Parametru Descriere
name Calea directorului de creat.
perm Drepturile directorului, în octal, de obicei 0o755.

Ce returnează

nil la succes sau o eroare *fs.PathError (de exemplu „file exists” sau „no such file or directory”).

Exemple

Exemplul 1: Crearea unui director

package main

import (
    "fmt"
    "os"
)

func main() {
    if err := os.Mkdir("poze", 0o755); err != nil {
        fmt.Println("eroare:", err)
        return
    }
    info, _ := os.Stat("poze")
    fmt.Println("nume:", info.Name(), "| este director:", info.IsDir())
}

Rezultat

nume: poze | este director: true

Exemplul 2: Directorul există deja

A doua creare dă eroare. errors.Is(err, fs.ErrExist) spune că motivul este existența directorului, deci putem continua liniștiți.

package main

import (
    "errors"
    "fmt"
    "io/fs"
    "os"
)

func main() {
    os.Mkdir("poze", 0o755)
    err := os.Mkdir("poze", 0o755)
    fmt.Println("eroare:", err)
    if errors.Is(err, fs.ErrExist) {
        fmt.Println("Directorul era deja creat, continuăm.")
    }
}

Rezultat

eroare: mkdir poze: file exists
Directorul era deja creat, continuăm.

Exemplul 3: Părintele lipsește

package main

import (
    "fmt"
    "os"
)

func main() {
    err := os.Mkdir("vacanta/2025/iasi", 0o755)
    fmt.Println("Mkdir:", err)

    err = os.MkdirAll("vacanta/2025/iasi", 0o755)
    fmt.Println("MkdirAll:", err)
}

Rezultat

Mkdir: mkdir vacanta/2025/iasi: no such file or directory
MkdirAll: <nil>

Greșeli frecvente

  • Folosești Mkdir pentru o cale cu mai multe niveluri care nu există. Doar MkdirAll creează și părinții.
  • Tratezi „file exists” ca eroare gravă. Dacă vrei doar să te asiguri că directorul există, verifică fs.ErrExist sau folosește MkdirAll, care nu dă eroare când directorul există.
  • Dai drepturi 0o644 unui director. Fără bitul de execuție (x) nimeni nu poate intra în director; folosește 0o755.

Comenzi înrudite

  • os.MkdirAll: Creează un director împreună cu toți părinții care lipsesc; nu dă eroare dacă directorul există deja.
  • os.MkdirTemp: Creează un director temporar nou, cu nume unic, și returnează calea lui.
  • os.Remove: Șterge un fișier sau un director gol.
  • os.IsNotExist: IsNotExist spune dacă o eroare înseamnă „fișierul nu există”; IsExist, dacă înseamnă „există deja”.