os.Setenv în Go

Setează o variabilă de mediu pentru programul curent; Unsetenv o șterge.

Sintaxă
func Setenv(key, value string) error
func Unsetenv(key string) error

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ște t.Setenv (care interzice t.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.