Jestem nowy w programowaniu Go i zastanawiam się: jaki jest preferowany sposób obsługi parametrów konfiguracyjnych programu Go (rodzaj rzeczy, do których można użyć plików właściwości lub plików ini , w innych kontekstach)?
go
configuration-files
theglauber
źródło
źródło
Odpowiedzi:
JSON Format pracował dla mnie całkiem dobrze. Standardowa biblioteka oferuje metody zapisywania wciętej struktury danych, dzięki czemu jest dość czytelna.
Zobacz także ten wątek golang-nuts .
Zaletą JSON jest to, że jest on dość prosty do parsowania i jest czytelny / edytowalny przez człowieka, oferując jednocześnie semantykę list i odwzorowań (które mogą się bardzo przydać), czego nie ma w przypadku wielu parserów konfiguracji typu ini.
Przykładowe użycie:
conf.json :
Program do odczytu konfiguracji
źródło
defer file.Close()
po sprawdzeniu open errInną opcją jest użycie TOML , który jest formatem INI stworzonym przez Toma Prestona-Wernera. I wbudowany parser go za to , że jest intensywnie testowany . Możesz używać go tak jak innych proponowanych tutaj opcji. Na przykład, jeśli masz te dane TOML w
something.toml
Następnie możesz załadować go do swojego programu Go za pomocą czegoś takiego
źródło
Viper to system zarządzania konfiguracją Golang, który współpracuje z JSON, YAML i TOML. Wygląda całkiem interesująco.
źródło
Zazwyczaj używam JSON do bardziej skomplikowanych struktur danych. Minusem jest to, że z łatwością dostajesz sporo kodu, aby poinformować użytkownika, gdzie był błąd, różne przypadki krawędzi i co nie.
Do podstawowej konfiguracji (klucze API, numery portów, ...) miałem bardzo dużo szczęścia z pakietem gcfg . Opiera się na formacie git config.
Z dokumentacji:
Przykładowa konfiguracja:
Przejdź do struktury:
I kod potrzebny do odczytania:
Obsługuje także wartości wycinków, dzięki czemu możesz pozwolić na wielokrotne określanie klucza i inne podobne funkcje.
źródło
Wystarczy użyć standardowych flag go z tagami iniflag .
Standardowe flagi go mają następujące zalety:
Jedyną wadą standardowych flag go są - problemy z zarządzaniem, gdy liczba flag używanych w aplikacji staje się zbyt duża.
Iniflags elegancko rozwiązuje ten problem: wystarczy zmodyfikować dwie linie w głównym pakiecie i uzyskuje magiczne wsparcie odczytu wartości flag z pliku ini. Flagi z plików ini można zastąpić, przekazując nowe wartości w wierszu polecenia.
Zobacz także https://groups.google.com/forum/#!topic/golang-nuts/TByzyPgoAQE, aby uzyskać szczegółowe informacje.
źródło
go test
nie pozwala mi na przekazywanie flag), podczas gdy plik konfiguracyjny nie.*FlagName = value
Zacząłem używać Gcfg, który używa plików podobnych do Ini. To proste - jeśli chcesz czegoś prostego, to dobry wybór.
Oto kod ładujący, którego obecnie używam, który ma ustawienia domyślne i zezwala na flagi wiersza poleceń (nie pokazano), które zastępują niektóre ustawienia:
źródło
spójrz na gonfig
źródło
https://github.com/spf13/viper i https://github.com/zpatrick/go-config to całkiem niezłe biblioteki plików konfiguracyjnych.
źródło
Użyj toml jak ten artykuł Czytanie plików konfiguracyjnych po drodze
źródło
Napisałem prostą bibliotekę konfiguracji ini w golang.
https://github.com/c4pt0r/cfg
bezpieczny dla goroutine, łatwy w użyciu
=================== Aktualizacja =======================
Ostatnio potrzebuję parsera INI z obsługą sekcji i piszę prosty pakiet:
możesz parsować INI, np. używając pakietu „flag”:
źródło
Możesz być także zainteresowany go-libucl , zestawem powiązań Go dla UCL, Universal Configuration Language. UCL jest trochę podobny do JSON, ale z lepszym wsparciem dla ludzi: obsługuje komentarze i konstrukcje czytelne dla człowieka, takie jak mnożniki SI (10k, 40M itp.), I ma nieco mniej płyt kotłowych (np. Cudzysłowy wokół klawiszy). W rzeczywistości jest całkiem zbliżony do formatu pliku konfiguracyjnego nginx, jeśli już go znasz.
źródło
Zgadzam się z nemo i napisałem małe narzędzie, aby wszystko było naprawdę łatwe.
bitbucket.org/gotamer/cfg to pakiet konfiguracyjny json
Przykład: doc.go
źródło
Próbowałem JSON. Zadziałało. Ale nienawidzę konieczności tworzenia struktury dokładnych pól i typów, które mogę ustawić. Dla mnie to był ból. Zauważyłem, że była to metoda używana przez wszystkie opcje konfiguracji, jakie mogłem znaleźć. Być może moje doświadczenie w dynamicznych językach sprawia, że jestem ślepy na zalety takiej gadatliwości. Stworzyłem nowy prosty format pliku konfiguracyjnego i bardziej dynamiczną bibliotekę do odczytu.
https://github.com/chrisftw/ezconf
Jestem całkiem nowy w świecie Go, więc może to nie być droga Go. Ale to działa, jest dość szybki i bardzo prosty w użyciu.
Plusy
Cons
źródło