Ich bin neu in der Go-Programmierung und frage mich: Was ist die bevorzugte Methode zum Behandeln von Konfigurationsparametern für ein Go-Programm (die Art von Dingen , für die man in anderen Kontexten Eigenschaftendateien oder INI- Dateien verwenden könnte )?
go
configuration-files
theglauber
quelle
quelle
Antworten:
Das JSON- Format hat bei mir ganz gut funktioniert. Die Standardbibliothek bietet Methoden zum Schreiben der eingerückten Datenstruktur, sodass sie gut lesbar ist.
Siehe auch diesen Golang-Muttern-Faden .
Die Vorteile von JSON sind, dass es ziemlich einfach zu analysieren und von Menschen lesbar / bearbeitbar ist, während Semantik für Listen und Zuordnungen angeboten wird (was sehr praktisch sein kann), was bei vielen Konfigurationsparsern vom Typ ini nicht der Fall ist.
Anwendungsbeispiel:
conf.json :
Programm zum Lesen der Konfiguration
quelle
defer file.Close()
nach dem Überprüfen offen errEine weitere Option ist die Verwendung von TOML , einem INI-ähnlichen Format, das von Tom Preston-Werner erstellt wurde. Ich habe dafür einen Go-Parser erstellt , der ausführlich getestet wird . Sie können es wie andere hier vorgeschlagene Optionen verwenden. Zum Beispiel, wenn Sie diese TOML-Daten in haben
something.toml
Dann können Sie es mit so etwas in Ihr Go-Programm laden
quelle
Viper ist ein Golang-Konfigurationsmanagementsystem, das mit JSON, YAML und TOML zusammenarbeitet. Es sieht ziemlich interessant aus.
quelle
Normalerweise verwende ich JSON für kompliziertere Datenstrukturen. Der Nachteil ist, dass Sie leicht eine Menge Code erhalten, um dem Benutzer mitzuteilen, wo der Fehler war, verschiedene Randfälle und was nicht.
Für die Basiskonfiguration (API-Schlüssel, Portnummern, ...) hatte ich sehr viel Glück mit dem gcfg- Paket. Es basiert auf dem Git-Konfigurationsformat.
Aus der Dokumentation:
Beispielkonfiguration:
Go struct:
Und der Code, der zum Lesen benötigt wird:
Es werden auch Slice-Werte unterstützt, sodass Sie die mehrfache Angabe eines Schlüssels und andere nützliche Funktionen wie diese zulassen können.
quelle
Verwenden Sie einfach Standard- Go-Flags mit Iniflags .
Standard-Go-Flags bieten folgende Vorteile:
Der einzige Nachteil, den Standard-Go-Flags haben, sind Verwaltungsprobleme, wenn die Anzahl der in Ihrer App verwendeten Flags zu groß wird.
Iniflags löst dieses Problem auf elegante Weise: Ändern Sie einfach zwei Zeilen in Ihrem Hauptpaket, und das Lesen von Flag-Werten aus der INI-Datei wird auf magische Weise unterstützt. Flags aus INI-Dateien können überschrieben werden, indem neue Werte in der Befehlszeile übergeben werden.
Weitere Informationen finden Sie unter https://groups.google.com/forum/#!topic/golang-nuts/TByzyPgoAQE .
quelle
go test
lässt mich keine Flags weitergeben), während eine Konfigurationsdatei dies nicht tun würde.*FlagName = value
Ich habe angefangen, Gcfg zu verwenden, das Ini-ähnliche Dateien verwendet. Es ist einfach - wenn Sie etwas Einfaches wollen, ist dies eine gute Wahl.
Hier ist der Ladecode, den ich derzeit verwende, der Standardeinstellungen hat und Befehlszeilenflags (nicht gezeigt) zulässt, die einige meiner Konfigurationen überschreiben:
quelle
schau dir gonfig an
quelle
https://github.com/spf13/viper und https://github.com/zpatrick/go-config sind ziemlich gute Bibliotheken für Konfigurationsdateien.
quelle
Verwenden Sie toml wie diesen Artikel Lesen von Konfigurationsdateien auf Go-Weise
quelle
Ich habe eine einfache Ini-Konfigurationsbibliothek in Golang geschrieben.
https://github.com/c4pt0r/cfg
Goroutine-sicher, einfach zu bedienen
=================== Update ======================
Vor kurzem brauche ich einen INI-Parser mit Abschnittsunterstützung und schreibe ein einfaches Paket:
Sie können INI wie mit dem "Flag" -Paket analysieren:
quelle
Vielleicht interessiert Sie auch go-libucl , eine Reihe von Go-Bindungen für UCL, die universelle Konfigurationssprache. UCL ist ein bisschen wie JSON, aber mit besserer Unterstützung für Menschen: Es unterstützt Kommentare und lesbare Konstrukte wie SI-Multiplikatoren (10k, 40M usw.) und hat ein bisschen weniger Boilerplate (z. B. Anführungszeichen um Schlüssel). Es kommt dem Format der Nginx-Konfigurationsdatei ziemlich nahe, wenn Sie damit bereits vertraut sind.
quelle
Ich stimme nemo zu und habe ein kleines Tool geschrieben, um alles wirklich einfach zu machen.
bitbucket.org/gotamer/cfg ist ein JSON- Konfigurationspaket
Ein Beispiel finden Sie unter doc.go
quelle
Ich habe JSON ausprobiert. Es funktionierte. Aber ich hasse es, die Struktur der genauen Felder und Typen erstellen zu müssen, die ich möglicherweise einstelle. Für mich war das ein Schmerz. Ich bemerkte, dass dies die Methode war, die von allen Konfigurationsoptionen verwendet wurde, die ich finden konnte. Vielleicht macht mich mein Hintergrund in dynamischen Sprachen blind für die Vorteile einer solchen Ausführlichkeit. Ich habe ein neues einfaches Konfigurationsdateiformat und eine dynamischere Bibliothek zum Auslesen erstellt.
https://github.com/chrisftw/ezconf
Ich bin ziemlich neu in der Go-Welt, daher ist es möglicherweise nicht der Go-Weg. Aber es funktioniert, es ist ziemlich schnell und super einfach zu bedienen.
Vorteile
Nachteile
quelle