Golang - Wie das zuweisen default-Wert, falls env var leer ist?
In golang, wie du das zuweisen eines default-Wertes, wenn eine Umgebungsvariable nicht gesetzt ist?
In python könnte ich tun mongo_password = os.getenv('MONGO_PASS', 'pass')
wo pass
ist der Standardwert, wenn MONGO_PASS
env var nicht gesetzt ist.
Habe ich versucht eine if-Anweisung basierend auf os.Getenv
leer, aber das scheint nicht zu funktionieren, aufgrund der Geltungsbereich von Variablen-Zuweisung innerhalb einer if-Anweisung. Und ich bin der überprüfung für mehrere env var, so kann ich nicht handeln auf diese Informationen innerhalb der if-Anweisung.
Ein
es spielt? Ich versuchte es mit `` mpass := os.Getenv("MONGO_PASS") if len(mpass) == 0 { log.Println("MONGO_PASS env var nicht gesetzt ist, mit "mongo " default") mpass := "pass" }`` Und ich bekomme diese:
Dort ist die Zeile 63 richtet mit mpass variable im if-block (ich nutze mpass später auf).
Es herausgefunden. Sollte mit
if
zu arbeiten.es spielt? Ich versuchte es mit `` mpass := os.Getenv("MONGO_PASS") if len(mpass) == 0 { log.Println("MONGO_PASS env var nicht gesetzt ist, mit "mongo " default") mpass := "pass" }`` Und ich bekomme diese:
./server.go:63: mpass declared and not used
Dort ist die Zeile 63 richtet mit mpass variable im if-block (ich nutze mpass später auf).
Es herausgefunden. Sollte mit
=
statt :=
auf die mpass
innerhalb der if
- Anweisung. Vielen Dank für den Aufruf mich aus Volker 🙂InformationsquelleAutor Ryan Clair | 2016-10-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es keine built-in zurückgreifen, um einen default-Wert,
so haben Sie zu tun, einen guten, alten if-else.
Aber Sie können immer eine Hilfsfunktion, um das zu erleichtern:
Beachten Sie, dass als @michael hausenblas wies in einem Kommentar,
Bedenken Sie, dass, wenn der Wert der Umgebungsvariable ist wirklich leer, erhalten Sie die fallback-Wert statt.
Sogar besser als @ŁukaszWojciechowski wies darauf hin, mit
os.LookupEnv
:value
und der leere string""
hat die Länge 0 bedeutet es, dass, wenn die env variable""
erhalten Sie das fallback/default-Wert und nicht den Wert (das ist trivial""
). Hängt wirklich davon ab, Ihren Fall, aber ich dachte es erwähnenswert, da ich mal ran in dieser semantische Fehler und verbrannte ein paar Zyklen Debuggen; -)Guter Punkt @MichaelHausenblas, Hinzugefügt, um meine post.
Statt
Getenv
könnten SieLookupEnv
. Es gibt auchok boolean
status, der Wert war tatsächlich da.InformationsquelleAutor janos
Was du suchst ist
os.LookupEnv
kombiniert mit einerif
- Anweisung.Hier ist janos Antwort aktualisiert LookupEnv:
InformationsquelleAutor puradox
Gehen nicht über die gleiche Funktionalität wie Python hier; die meisten idiomatischen Weg, es zu tun, obwohl, ich denken kann, ist:
Beachten Sie, dass die Linie
mongo_password := "pass"
ist wichtig, denn mit diesermongo_password
deklariert und definiert (festgelegtpass
als der Standardwert). Wenn du das nicht hast, dann kann ich mir vorstellen, ein Fehler. In unserem Fall oben, nurmp
hat der lokale Bereich derif
, FWIW.OHHHHHH. Licht f ' Ing-Lampe. Danke. Ich war Vermischung erklären (:=) und Zuweisung (=). Funktioniert wie ein champ. Sie rocken Michael.
InformationsquelleAutor Michael Hausenblas
Hatte die gleiche Frage wie der OP und jemanden gefunden, eingeschlossen die Antworten aus diesem thread in eine nette Bibliothek, die Recht einfach zu verwenden, hoffe, dies hilft anderen!
https://github.com/caarlos0/env
InformationsquelleAutor Jaime Gago
Einen sauberen code, mit dem ich dies tun:
Ich definiert eine Funktion, die verwendet wird, in der ganzen app
InformationsquelleAutor Eddy Hernandez
Den Fall, Sie sind OK mit dem hinzufügen von ein wenig Abhängigkeit, die Sie verwenden können, so etwas wie https://github.com/urfave/cli
InformationsquelleAutor Oleg Neumyvakin