Ce face os.Setenv
os.Setenv creează sau modifică o variabilă de mediu a procesului curent. Schimbarea se vede imediat în os.Getenv și este moștenită de procesele copil pornite după aceea cu os/exec. Nu modifică terminalul din care ai pornit programul.
os.Unsetenv (din Go 1.4) șterge variabila, astfel încât os.LookupEnv raportează că nu există. În teste, preferă t.Setenv, care restaurează singur valoarea la final.
Parametri
| Parametru | Descriere |
|---|---|
key |
Numele variabilei. Nu poate fi gol și nu poate conține =. |
value |
Valoarea nouă. |
Ce returnează
nil sau o eroare (de exemplu pentru un nume nevalid).
Exemple
Exemplul 1: Setare, modificare, ștergere
package main
import (
"fmt"
"os"
)
func main() {
os.Setenv("TEMA", "luminoasa")
fmt.Println("TEMA:", os.Getenv("TEMA"))
os.Setenv("TEMA", "intunecata")
fmt.Println("TEMA:", os.Getenv("TEMA"))
os.Unsetenv("TEMA")
_, exista := os.LookupEnv("TEMA")
fmt.Println("mai există?", exista)
}
Rezultat
TEMA: luminoasa
TEMA: intunecata
mai există? false
Exemplul 2: Procesul copil moștenește variabila
package main
import (
"fmt"
"os"
"os/exec"
)
func main() {
os.Setenv("CLIENT", "Ana Popescu")
iesire, err := exec.Command("sh", "-c", "echo Salut, $CLIENT!").Output()
if err != nil {
fmt.Println("eroare:", err)
return
}
fmt.Print(string(iesire))
}
Rezultat
Salut, Ana Popescu!
Exemplul 3: Nume nevalid
package main
import (
"fmt"
"os"
)
func main() {
fmt.Println(os.Setenv("", "x"))
fmt.Println(os.Setenv("A=B", "x"))
}
Rezultat
setenv: invalid argument
setenv: invalid argument
Greșeli frecvente
- Te aștepți ca după program variabila să existe în terminal. Un proces nu poate schimba mediul procesului părinte.
- Folosești
os.Setenvîn teste paralele: mediul este comun pentru tot procesul. Foloseștet.Setenv(care interzicet.Parallel).
Comenzi înrudite
os.Getenv: Returnează valoarea unei variabile de mediu sau textul gol dacă variabila nu există.os.LookupEnv: Citește o variabilă de mediu și spune separat dacă există (chiar și cu valoare goală).os.Clearenv: Șterge toate variabilele de mediu ale procesului curent.exec.Command: Pregătește rularea unui program extern cu argumentele date; programul pornește abia la Run, Output sau Start.