Lecture d'une tranche de cartes avec Golang Viper
Dans Golang, la bibliothèque Viper simplifie le travail avec des fichiers de configuration provenant de différents formats de fichiers. Cependant, lors de l'accès aux données cartographiques imbriquées, les développeurs rencontrent parfois des difficultés.
Le problème
Considérez le fichier de configuration HCL suivant :
interval = 10 statsd_prefix = "pinger" group "dns" { target_prefix = "ping" target "dns" { hosts = [ "dnsserver1", "dnsserver2" ] } }
Le un problème survient lors de l'accès à la section "groupe" en tant que carte à l'aide de viper.GetStringMap("group"). La structure résultante est une tranche de cartes, comme indiqué ci-dessous :
[]map[string]interface {} (len=1 cap=1) { map[string]interface {} (len=1) { dns: []map[string]interface {} (len=1 cap=2) { ... } } }
La solution
Au lieu d'essayer de gérer manuellement une telle structure, la fonction Unmarshal de Viper fournit une solution plus élégante. En définissant une structure de configuration personnalisée, vous pouvez demander à Viper de décoder le fichier de configuration directement en objet.
Par exemple, la structure de configuration suivante correspond au fichier HCL :
type config struct { interval int `mapstructure:"interval"` statsdPrefix string `mapstructure:"statsd_prefix"` groups []group } type group struct { groupName string `mapstructure:"group"` targetPrefix string `mapstructure:"target_prefix"` targets []target } type target struct { targetName string `mapstructure:"target"` hosts []string `mapstructure:"hosts"` }
Avec Cette structure en place, vous pouvez désorganiser le fichier de configuration comme suit :
var config config err := viper.Unmarshal(&config) if err != nil { t.Fatalf("unable to decode into struct, %v", err) }
Cette approche automatise le mappage et l'analyse des données, offrant ainsi une solution plus simple et plus moyen efficace d'accéder aux données cartographiques imbriquées dans vos applications Golang.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!