0Pricing
Go Academy · Lektion

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 port wird nun der Umgebungsvariable MYAPP_PORT zugeordnet

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_PORT

Verschachtelte 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_PORT

Eine 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.Getenv gibt eine leere Zeichenkette zurück, wenn die Variable nicht gesetzt ist
  • os.LookupEnv gibt 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 true

Alles 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
  • AutomaticEnv und SetEnvPrefix bilden Schlüssel auf PREFIX_KEY ab
  • Verwenden Sie SetEnvKeyReplacer für verschachtelte Schlüssel mit Punkten
  • Die Standardbibliothek stellt dafür os.Getenv und os.LookupEnv bereit

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.

Alle Lektionen in diesem Kurs

  1. Konfigurationsdateien lesen
  2. Umgebungsvariablen
  3. Standardwerte und Überwachung
  4. An Structs binden
← Zurück zu Go Academy