Umgebungsvariablen
Konfiguration über die Umgebung überschreiben
Umgebungsvariablen ist eine kostenlose Go Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Go Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Go Academy-Kurs umfasst insgesamt 4 Lektionen.
Warum Umgebungsvariablen
Die Methodik der Twelve-Factor App empfiehlt, Konfiguration in der Umgebung zu speichern. Umgebungsvariablen ermöglichen es, dass sich dieselbe Binärdatei in Entwicklung, Staging und Produktion unterschiedlich verhält, ohne dass Dateien bearbeitet werden müssen.
Viper kann Umgebungsvariablen über die Dateikonfiguration legen.
Reihenfolge der Prioritäten
Viper ermittelt einen Schlüssel, indem es die Quellen in der folgenden Prioritätsreihenfolge prüft, beginnend mit der höchsten:
- Explizite
Set-Aufrufe - Flags
- Umgebungsvariablen
- Konfigurationsdatei
- Standardwerte
Eine Umgebungsvariable überschreibt daher die Datei, hat aber eine niedrigere Priorität als ein explizites Set.
Unterstützung für Umgebungsvariablen aktivieren
viper.AutomaticEnv() weist Viper an, bei jedem angeforderten Schlüssel die Umgebungsvariablen zu prüfen. Danach berücksichtigt viper.GetString("port") die Umgebungsvariable PORT.
viper.AutomaticEnv()
port := viper.GetString("port")Ein Präfix hinzufügen
Um Konflikte mit unabhängigen Umgebungsvariablen zu vermeiden, legen Sie ein Präfix fest:
viper.SetEnvPrefix("myapp")- Der Schlüssel
portwird nun der UmgebungsvariableMYAPP_PORTzugeordnet
Viper schreibt den Schlüssel in Großbuchstaben und setzt das Präfix mit einem Unterstrich davor.
viper.SetEnvPrefix("myapp")
viper.AutomaticEnv()
fmt.Println(viper.GetString("port")) // reads MYAPP_PORTVerschachtelte Schlüssel verarbeiten
Umgebungsvariablen dürfen keine Punkte enthalten. Verwenden Sie einen Key-Replacer, um Schlüssel mit Punkten auf Unterstriche abzubilden, sodass server.port zu SERVER_PORT wird.
replacer := strings.NewReplacer(".", "_")
viper.SetEnvKeyReplacer(replacer)
viper.AutomaticEnv()
// server.port -> SERVER_PORTEine einzelne Variable binden
Statt des automatischen Modus können Sie einen Schlüssel mit viper.BindEnv explizit binden. Das ist nützlich, wenn der Name der Umgebungsvariablen nicht Ihrer Präfixkonvention folgt.
viper.BindEnv("id", "ACCOUNT_ID")
fmt.Println(viper.GetString("id"))Das os-Paket der Standardbibliothek
Intern wird die Prozessumgebung ausgelesen. Die Standardbibliothek stellt dafür os.Getenv und os.LookupEnv bereit.
os.Getenvgibt eine leere Zeichenkette zurück, wenn die Variable nicht gesetzt istos.LookupEnvgibt zusätzlich einen booleschen Wert zurück, der angibt, ob sie vorhanden war
val, ok := os.LookupEnv("PORT")
if !ok {
val = "8080" // default
}Umgebungsvariablen in Go setzen
Für Tests oder Standardwerte können Sie Umgebungsvariablen programmgesteuert mit os.Setenv setzen. Genau das verwenden wir als Nächstes, um das Überschreibungsverhalten zu demonstrieren.
os.Setenv("MYAPP_PORT", "9090")Leer vs. nicht gesetzt
Achtung: Eine auf eine leere Zeichenkette gesetzte Umgebungsvariable ist trotzdem vorhanden. os.LookupEnv gibt ("", true) zurück. Wenn Sie nur os.Getenv verwenden, können Sie nicht zwischen leer und nicht gesetzt unterscheiden. Das ist bei booleschen Flags wichtig.
os.Setenv("FEATURE", "")
v, ok := os.LookupEnv("FEATURE")
fmt.Println(v == "", ok) // true trueAlles zusammenführen (Konzept)
Ein typischer Ablauf beim Start: Lesen Sie die Datei für Standardwerte ein und rufen Sie anschließend AutomaticEnv auf, damit Umgebungsvariablen aus der Bereitstellung Vorrang haben. Das Betriebsteam kann MYAPP_PORT ändern, ohne die YAML-Datei anzufassen.
viper.SetConfigName("config")
viper.ReadInConfig()
viper.SetEnvPrefix("myapp")
viper.AutomaticEnv()
fmt.Println(viper.GetInt("port"))Ausführbar: Demonstration zum Überschreiben durch die Umgebung
Dieses Programm aus der Standardbibliothek bildet die Prioritätsreihenfolge von Viper nach: Ein Standardwert aus einer Datei wird durch die Umgebung überschrieben.
package main
import (
"fmt"
"os"
)
func get(key, fileDefault string) string {
if v, ok := os.LookupEnv(key); ok {
return v
}
return fileDefault
}
func main() {
os.Setenv("PORT", "9090")
fmt.Println("port:", get("PORT", "8080"))
fmt.Println("host:", get("HOST", "localhost"))
}Kurzer Test
Testen Sie Ihr Verständnis der Konfiguration mit Umgebungsvariablen.
Zusammenfassung
Sie haben gelernt, Konfiguration aus der Umgebung zu überschreiben:
- Umgebungsvariablen haben in Vipers Prioritätsreihenfolge eine hohe Position und stehen über der Datei
AutomaticEnvundSetEnvPrefixbilden Schlüssel aufPREFIX_KEYab- Verwenden Sie
SetEnvKeyReplacerfür verschachtelte Schlüssel mit Punkten - Die Standardbibliothek stellt dafür
os.Getenvundos.LookupEnvbereit
Häufig gestellte Fragen
Ist die Lektion „Umgebungsvariablen“ kostenlos?
Ja — der vollständige Text von „Umgebungsvariablen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Go Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Go Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Umgebungsvariablen“?
Konfiguration über die Umgebung überschreiben Du übst Go Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Go Academy zu starten?
Keine Vorkenntnisse erforderlich. Go Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „Umgebungsvariablen“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Go Academy-Lektion Code schreiben und ausführen?
Ja. Jede Go Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.