Sto lavorando al mio primo vero progetto Go e ho cercato alcuni strumenti per gestire la configurazione.Configurazione avanzata con il golang Viper lib
Infine, ho trovato questo strumento: https://github.com/spf13/viper che è veramente bello, ma ho alcuni problemi quando si tenta di gestire alcune configurazioni più complesse, come il seguente esempio config.yaml:
app:
name: "project-name"
version 1
models:
modelA:
varA: "foo"
varB: "bar"
modelB:
varA: "baz"
varB: "qux"
varC: "norf"
I don so come ottenere i valori dal modello B per esempio. Guardando il codice di lib, ho trovato i seguenti, ma non capisco come usarlo:
// Marshals the config into a Struct
func Marshal(rawVal interface{}) error {...}
func AllSettings() map[string]interface{} {...}
Quello che voglio è essere in grado, da ogni parte nel mio pacchetto, per fare qualcosa di simile :
modelsConf := viper.Get("models")
fmt.Println(modelsConf["modelA"]["varA"])
Qualcuno potrebbe spiegarmi il modo migliore per raggiungere questo obiettivo?
Tutto dipende se i dati sono coerenti. Se tutti i modelli contengono solo varA e varB, perché dovresti creare una nuova entità chiamata modelA (e modelB)? Ma se modelB contiene varA, varB e varC, allora devi fare qualcosa di completamente diverso. – Dippo
Infatti, modelB dovrebbe anche essere in grado di contenere un varC, ho aggiornato l'esempio nella mia domanda iniziale –
Dai un'occhiata a questo [collegamento] (http://golang.org/pkg/encoding/json/#example_RawMessage) – Dippo