os.Chdir în Go

Schimbă directorul curent al programului; căile relative pornesc apoi de acolo.

Sintaxă
func Chdir(dir string) error

Ce face os.Chdir

os.Chdir face ca directorul dat să devină directorul curent al procesului, ca cd din terminal. După apel, toate căile relative ("date.txt") sunt căutate în noul director.

Schimbarea este valabilă pentru tot programul, inclusiv pentru goroutine-urile care rulează în paralel, și nu afectează terminalul din care ai pornit programul. În programele mari este mai sigur să lucrezi cu căi complete (filepath.Join(baza, nume)) decât să schimbi directorul curent.

Parametri

Parametru Descriere
dir Directorul nou, cale relativă sau absolută.

Ce returnează

nil la succes sau o eroare *fs.PathError.

Exemple

Exemplul 1: Intrare într-un director și înapoi

package main

import (
    "fmt"
    "os"
    "path/filepath"
)

func main() {
    os.Mkdir("rapoarte", 0o755)
    if err := os.Chdir("rapoarte"); err != nil {
        fmt.Println("eroare:", err)
        return
    }
    wd, _ := os.Getwd()
    fmt.Println("acum sunt în:", filepath.Base(wd))

    os.WriteFile("ianuarie.txt", []byte("total: 830 lei\n"), 0o644) // ajunge în rapoarte/

    os.Chdir("..")
    date, _ := os.ReadFile("rapoarte/ianuarie.txt")
    fmt.Print("din directorul inițial: ", string(date))
}

Rezultat

acum sunt în: rapoarte
din directorul inițial: total: 830 lei

Exemplul 2: Director inexistent

package main

import (
    "fmt"
    "os"
)

func main() {
    err := os.Chdir("proiecte/vechi")
    fmt.Println(err)
}

Rezultat

chdir proiecte/vechi: no such file or directory

Greșeli frecvente

  • Schimbi directorul curent într-o goroutine și te aștepți ca restul programului să nu fie afectat. Directorul curent este unul singur pentru tot procesul.
  • Uiți să verifici eroarea și continui să scrii fișiere, care ajung în directorul greșit.

Comenzi înrudite

  • os.Getwd: Returnează calea absolută a directorului curent (working directory).
  • filepath.Abs: Transformă o cale relativă în cale absolută, pornind de la directorul curent.
  • filepath.Join: Unește mai multe bucăți într-o cale, cu separatorul corect al sistemului, și curăță rezultatul.
  • os.Mkdir: Creează un singur director nou; dă eroare dacă există deja sau dacă directorul părinte lipsește.