Pracuję nad moim pierwszym prawdziwym projektem Go i szukałem narzędzi do obsługi konfiguracji.Zaawansowana konfiguracja z golang Viper lib
Wreszcie znalazłem tego narzędzia: https://github.com/spf13/viper, który jest naprawdę ładne, ale mam pewne problemy, gdy próbuję obsłużyć kilka bardziej złożonych konfiguracjach, takich jak następującej config.yaml przykład:
app:
name: "project-name"
version 1
models:
modelA:
varA: "foo"
varB: "bar"
modelB:
varA: "baz"
varB: "qux"
varC: "norf"
I don wiesz, jak uzyskać wartości z modelu B na przykład. Patrząc na kod lib, Znalazłem co nastepuje, ale ja naprawdę nie rozumiem, jak go używać:
// Marshals the config into a Struct
func Marshal(rawVal interface{}) error {...}
func AllSettings() map[string]interface{} {...}
Co chcę jest w stanie, z całym moim pakiecie, aby zrobić coś podobnego :
modelsConf := viper.Get("models")
fmt.Println(modelsConf["modelA"]["varA"])
Czy ktoś mógłby mi wytłumaczyć najlepszy sposób, aby to osiągnąć?
Wszystko zależy od tego, czy dane są spójne. Jeśli wszystkie modele zawierają tylko varA i varB, dlaczego stworzysz nowy obiekt o nazwie modelA (i modelB)? Ale jeśli model B zawiera warA, varB i varC, musisz zrobić coś zupełnie innego. – Dippo
W rzeczywistości model B powinien również być w stanie zawrzeć zmienną C, zaktualizowałem przykład w moim początkowym pytaniu –
Zobacz [link] (http://golang.org/pkg/encoding/json/#example_RawMessage) – Dippo