os.Getwd în Go

Returnează calea absolută a directorului curent (working directory).

Sintaxă
func Getwd() (dir string, err error)

Ce face os.Getwd

os.Getwd spune în ce director rulează programul, adică de unde pornesc căile relative. Echivalentul din terminal este pwd.

Directorul curent este cel din care ai pornit programul, nu cel în care se află fișierul executabil. Pentru locul executabilului folosește os.Executable.

Ce returnează

Calea absolută a directorului curent și nil, sau o eroare (rar, de exemplu dacă directorul a fost șters între timp).

Exemple

Exemplul 1: Afișarea directorului curent

Calea completă diferă de la un calculator la altul.

package main

import (
    "fmt"
    "os"
)

func main() {
    wd, err := os.Getwd()
    if err != nil {
        fmt.Println("eroare:", err)
        return
    }
    fmt.Println("Directorul curent:", wd)
}

Rezultat posibil (diferă la fiecare rulare)

Directorul curent: /home/ana/proiecte/facturi

Exemplul 2: Getwd după Chdir

Afișăm doar ultimul nume din cale, care nu depinde de calculator.

package main

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

func main() {
    os.MkdirAll("magazin/comenzi", 0o755)
    os.Chdir("magazin/comenzi")

    wd, _ := os.Getwd()
    fmt.Println("ultimul director:", filepath.Base(wd))
    fmt.Println("părintele:", filepath.Base(filepath.Dir(wd)))
    fmt.Println("cale absolută:", filepath.IsAbs(wd))
}

Rezultat

ultimul director: comenzi
părintele: magazin
cale absolută: true

Greșeli frecvente

  • Presupui că directorul curent este cel al proiectului. Dacă programul e pornit din alt loc (de un serviciu systemd, de un cron), directorul curent este altul.

Comenzi înrudite

  • os.Chdir: Schimbă directorul curent al programului; căile relative pornesc apoi de acolo.
  • os.Executable: Returnează calea fișierului executabil care rulează acum (programul compilat).
  • filepath.Abs: Transformă o cale relativă în cale absolută, pornind de la directorul curent.
  • filepath.Base: Returnează ultimul element al unei căi: numele fișierului (sau al ultimului director).