Ce face os.UserHomeDir
os.UserHomeDir returnează directorul personal: $HOME pe Linux și macOS, %USERPROFILE% pe Windows.
os.UserConfigDir returnează locul în care aplicațiile își țin setările: $XDG_CONFIG_HOME sau ~/.config pe Linux, ~/Library/Application Support pe macOS, %AppData% pe Windows. os.UserCacheDir returnează locul pentru date care pot fi refăcute oricând: ~/.cache pe Linux, ~/Library/Caches pe macOS, %LocalAppData% pe Windows.
În aceste directoare creezi un subdirector cu numele aplicației tale, de exemplu filepath.Join(config, "facturi"). Toate trei dau eroare dacă locul nu poate fi aflat (de exemplu $HOME nu este setată).
Ce returnează
Calea directorului și nil, sau o eroare.
Exemple
Exemplul 1: Directoarele pe Linux
package main
import (
"fmt"
"os"
)
func main() {
home, _ := os.UserHomeDir()
config, _ := os.UserConfigDir()
cache, _ := os.UserCacheDir()
fmt.Println("home: ", home)
fmt.Println("config:", config)
fmt.Println("cache: ", cache)
}
Rezultat pe Linux, pentru utilizatorul ana
home: /home/ana
config: /home/ana/.config
cache: /home/ana/.cache
Exemplul 2: Calea depinde de $HOME
Setăm HOME din cod. Rezultatul de mai jos este cel de pe macOS (unde a fost rulat exemplul); pe Linux ar fi /home/ana/.config și /home/ana/.cache.
package main
import (
"fmt"
"os"
"path/filepath"
)
func main() {
os.Setenv("HOME", "/home/ana")
os.Unsetenv("XDG_CONFIG_HOME")
os.Unsetenv("XDG_CACHE_HOME")
home, _ := os.UserHomeDir()
config, _ := os.UserConfigDir()
cache, _ := os.UserCacheDir()
fmt.Println("home: ", home)
fmt.Println("config:", filepath.Join(config, "facturi", "setari.json"))
fmt.Println("cache: ", filepath.Join(cache, "facturi"))
}
Rezultat
home: /home/ana
config: /home/ana/Library/Application Support/facturi/setari.json
cache: /home/ana/Library/Caches/facturi
Exemplul 3: Fără HOME: eroare
package main
import (
"fmt"
"os"
)
func main() {
os.Unsetenv("HOME")
_, err := os.UserHomeDir()
fmt.Println("UserHomeDir:", err)
_, err = os.UserConfigDir()
fmt.Println("UserConfigDir:", err)
}
Rezultat
UserHomeDir: $HOME is not defined
UserConfigDir: $HOME is not defined
Greșeli frecvente
- Scrii fișierele de configurare direct în directorul personal (
~/.aplicatia_mea). FoloseșteUserConfigDir, unde utilizatorii le caută. - Construiești calea cu
"~/...". Go nu înlocuiește~; ia directorul cuUserHomeDir. - Pui în cache date care nu pot fi refăcute. Sistemul sau utilizatorul pot goli oricând directorul de cache.
Comenzi înrudite
os.Getenv: Returnează valoarea unei variabile de mediu sau textul gol dacă variabila nu există.os.TempDir: Returnează directorul pentru fișiere temporare al sistemului (de obicei /tmp pe Linux).filepath.Join: Unește mai multe bucăți într-o cale, cu separatorul corect al sistemului, și curăță rezultatul.os.MkdirAll: Creează un director împreună cu toți părinții care lipsesc; nu dă eroare dacă directorul există deja.