os.Getenv în Go

Returnează valoarea unei variabile de mediu sau textul gol dacă variabila nu există.

Sintaxă
func Getenv(key string) string

Ce face os.Getenv

Variabilele de mediu sunt perechi NUME=valoare pe care sistemul le dă fiecărui proces: HOME, PATH, USER, dar și setări proprii (PORT, DATABASE_URL). os.Getenv citește una dintre ele.

Dacă variabila nu există, primești "", la fel ca pentru o variabilă setată la textul gol. Când trebuie să faci diferența, folosește os.LookupEnv. Pe Linux și macOS numele țin cont de majuscule (Path ≠ PATH); pe Windows nu.

Parametri

Parametru Descriere
key Numele variabilei, de exemplu "PORT".

Ce returnează

Valoarea variabilei, ca text; "" dacă lipsește.

Exemple

Exemplul 1: Citirea unei setări

În practică variabila e setată din terminal (PORT=9000 ./server); aici o setăm din cod ca exemplul să fie complet.

package main

import (
    "fmt"
    "os"
)

func main() {
    os.Setenv("ORAS", "Iași")
    fmt.Println("ORAS =", os.Getenv("ORAS"))
    fmt.Printf("NECUNOSCUT = %q\n", os.Getenv("NECUNOSCUT"))
}

Rezultat

ORAS = Iași
NECUNOSCUT = ""

Exemplul 2: Valoare implicită

package main

import (
    "fmt"
    "os"
)

func envSau(nume, implicit string) string {
    if v := os.Getenv(nume); v != "" {
        return v
    }
    return implicit
}

func main() {
    os.Setenv("APP_MOD", "productie")
    fmt.Println("mod:", envSau("APP_MOD", "dezvoltare"))
    fmt.Println("port:", envSau("APP_PORT", "8080"))
}

Rezultat

mod: productie
port: 8080

Exemplul 3: Variabile ale sistemului

Valorile diferă de la un calculator la altul.

package main

import (
    "fmt"
    "os"
)

func main() {
    fmt.Println("HOME:", os.Getenv("HOME"))
    fmt.Println("USER:", os.Getenv("USER"))
    fmt.Println("SHELL:", os.Getenv("SHELL"))
}

Rezultat posibil (diferă la fiecare rulare)

HOME: /home/ana
USER: ana
SHELL: /bin/bash

Greșeli frecvente

  • Transformi direct în număr: port, _ := strconv.Atoi(os.Getenv("PORT")). Dacă variabila lipsește, primești 0 fără niciun avertisment; verifică eroarea și pune o valoare implicită.
  • Scrii numele cu litere mici pe Linux (os.Getenv("home")). Numele sunt sensibile la majuscule.

Comenzi înrudite

  • os.LookupEnv: Citește o variabilă de mediu și spune separat dacă există (chiar și cu valoare goală).
  • os.Setenv: Setează o variabilă de mediu pentru programul curent; Unsetenv o șterge.
  • os.Environ: Returnează toate variabilele de mediu, ca o listă de texte de forma NUME=valoare.
  • os.ExpandEnv: Înlocuiește $NUME și ${NUME} dintr-un text cu valorile variabilelor de mediu.