Umgebungsvariablen mit Go festlegen: Persistenzproblem
Einführung
In dieser Programmierfrage: Wir befassen uns mit einem häufigen Problem, mit dem Entwickler beim Festlegen von Umgebungsvariablen mithilfe des „os“-Pakets in Go konfrontiert sind. Wir werden das Verhalten von Umgebungsvariablen in untergeordneten Prozessen untersuchen und eine Lösung bereitstellen, um die geänderte Variable in der aktuellen Sitzung dauerhaft zu machen.
Frage
Betrachten Sie den folgenden Go-Code das versucht, eine Umgebungsvariable festzulegen:
package main import ( "os" "fmt" ) func main() { _ = os.Setenv("FOO", "BAR") fmt.Println(os.Getenv("FOO")) }
Beim Ausführen dieses Codes wird die erwartete Umgebungsvariable „FOO“ korrekt gedruckt, was bestätigt, dass die Einstellung vorgenommen wurde erfolgreich. Bei der Überprüfung der Umgebungsvariablen in der aktuellen Terminalsitzung bleibt diese jedoch leer. Dies wirft die Frage auf: Warum ist die eingestellte Variable in der Sitzung nicht persistent?
Antwort
Das beobachtete Verhalten ist aufgrund der Art der Prozesse in Betriebssystemen zu erwarten. Wenn ein neuer Prozess erstellt wird (in diesem Fall das Go-Programm), wird die Umgebung des übergeordneten Prozesses (die Terminalsitzung) kopiert. Alle Änderungen an der Umgebung, die im untergeordneten Prozess (dem Go-Programm) vorgenommen werden, sind auf diesen Prozess beschränkt und wirken sich nicht auf den übergeordneten Prozess aus.
Lösung
Um das zu machen Wenn die Änderung der Umgebungsvariablen in der aktuellen Sitzung bestehen bleibt, muss ein neuer Shell-Prozess mit der geänderten Umgebung gestartet werden. Dies kann durch den folgenden Ansatz erreicht werden:
package main import ( "os/exec" "fmt" ) func main() { // Set the environment variable _ = os.Setenv("FOO", "BAR") // Start a new shell cmd := exec.Command("bash") cmd.Run() }
Durch die Ausführung einer neuen Shell mit der aktualisierten Umgebung werden die vom Go-Programm vorgenommenen Änderungen in der aktuellen Sitzung wirksam.
Fazit
Das Verständnis des Verhaltens von Umgebungsvariablen in untergeordneten Prozessen ist für eine effektive Programmierung von entscheidender Bedeutung. Mithilfe der in dieser Antwort beschriebenen Methode können Entwickler Umgebungsvariablen in ihren Go-Programmen festlegen und beibehalten und so sicherstellen, dass die Änderungen in der aktuellen Sitzung widergespiegelt werden.
Das obige ist der detaillierte Inhalt vonWarum bleiben die „os.Setenv'-Änderungen meines Go-Programms in der aktuellen Shell-Sitzung nicht bestehen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!