Ce face os.Environ
os.Environ returnează o copie a întregului mediu al procesului. Fiecare element are forma "NUME=valoare"; le separi cu strings.Cut(e, "="). Ordinea nu este garantată.
Este folosită des pentru a porni un proces copil cu mediul curent plus câteva variabile în plus: cmd.Env = append(os.Environ(), "MOD=test").
Ce returnează
Un []string nou; modificarea lui nu schimbă mediul procesului.
Exemple
Exemplul 1: Listarea variabilelor
Golim mediul cu os.Clearenv ca rezultatul să fie același pe orice calculator, apoi sortăm.
package main
import (
"fmt"
"os"
"slices"
)
func main() {
os.Clearenv()
os.Setenv("ORAS", "Iași")
os.Setenv("LIMBA", "ro")
os.Setenv("MONEDA", "RON")
mediu := os.Environ()
slices.Sort(mediu)
for _, e := range mediu {
fmt.Println(e)
}
}
Rezultat
LIMBA=ro
MONEDA=RON
ORAS=Iași
Exemplul 2: Separarea numelui de valoare
package main
import (
"fmt"
"os"
"slices"
"strings"
)
func main() {
os.Setenv("APP_PORT", "8080")
os.Setenv("APP_MOD", "test")
os.Setenv("APP_URL", "https://exemplu.ro/?a=1")
setari := map[string]string{}
for _, e := range os.Environ() {
nume, valoare, _ := strings.Cut(e, "=") // taie doar la primul =
if strings.HasPrefix(nume, "APP_") {
setari[nume] = valoare
}
}
chei := make([]string, 0, len(setari))
for k := range setari {
chei = append(chei, k)
}
slices.Sort(chei)
for _, k := range chei {
fmt.Printf("%-8s -> %s\n", k, setari[k])
}
}
Rezultat
APP_MOD -> test
APP_PORT -> 8080
APP_URL -> https://exemplu.ro/?a=1
Exemplul 3: Mediu extins pentru un proces copil
package main
import (
"fmt"
"os"
"os/exec"
)
func main() {
cmd := exec.Command("sh", "-c", "echo rulăm în modul $MOD")
cmd.Env = append(os.Environ(), "MOD=test")
iesire, err := cmd.Output()
fmt.Print(string(iesire))
fmt.Println("eroare:", err)
fmt.Printf("în părinte MOD = %q\n", os.Getenv("MOD"))
}
Rezultat
rulăm în modul test
eroare: <nil>
în părinte MOD = ""
Greșeli frecvente
- Afișezi tot mediul în jurnale. Poate conține parole și chei API; filtrează ce afișezi.
- Împarți cu
strings.Split(e, "="): valorile pot conține=. Foloseștestrings.Cut, care taie doar la primul.
Comenzi înrudite
os.Getenv: Returnează valoarea unei variabile de mediu sau textul gol dacă variabila nu există.os.Clearenv: Șterge toate variabilele de mediu ale procesului curent.os.Setenv: Setează o variabilă de mediu pentru programul curent; Unsetenv o șterge.exec.Cmd: Structura care descrie o comandă externă: programul, argumentele, directorul, mediul și intrarea/ieșirile ei.