Analyse des fichiers YAML dans Go
Problème :
Vous rencontrez des difficultés pour analyser un Fichier YAML dans Go. Vous trouverez ci-dessous l'exemple de fichier YAML que vous essayez d'analyser :
--- firewall_network_rules: rule1: src: blablabla-host dst: blabla-hostname ...
Solution :
Pour analyser le fichier YAML donné, vous devez créer une structure qui reflète fidèlement sa structure. Dans votre cas, le fichier YAML contient des éléments imbriqués, votre structure doit donc refléter cette imbrication. La définition correcte de la structure est :
type FirewallNetworkRule struct { Src string `yaml:"src"` Dst string `yaml:"dst"` } type Config struct { FirewallNetworkRules map[string][]FirewallNetworkRule `yaml:"firewall_network_rules"` }
Maintenant, pour désassembler le fichier YAML dans la structure de configuration, utilisez le code suivant :
var config Config err := yaml.Unmarshal(yamlFile, &config) if err != nil { panic(err) } fmt.Printf("Value: %#v\n", config.FirewallNetworkRules)
Exemple avancé :
Lorsque vous travaillez avec des fichiers YAML complexes, tels que Kubernetes ou le service Google Cloud YAML, vous devrez peut-être imbriquer des structures pour représenter des structures de données complexes. Par exemple, le YAML suivant définit un service Kubernetes :
apiVersion: v1 kind: Service metadata: name: myName namespace: default labels: router.deis.io/routable: "true" annotations: router.deis.io/domains: "" spec: type: NodePort selector: app: myName ports: - name: http port: 80 targetPort: 80 - name: https port: 443 targetPort: 443
La structure Go correspondante pour ce YAML serait :
type Service struct { APIVersion string `yaml:"apiVersion"` Kind string `yaml:"kind"` Metadata struct { Name string `yaml:"name"` Namespace string `yaml:"namespace"` Labels struct { RouterDeisIoRoutable string `yaml:"router.deis.io/routable"` } `yaml:"labels"` Annotations struct { RouterDeisIoDomains string `yaml:"router.deis.io/domains"` } `yaml:"annotations"` } `yaml:"metadata"` Spec struct { Type string `yaml:"type"` Selector struct { App string `yaml:"app"` } `yaml:"selector"` Ports []struct { Name string `yaml:"name"` Port int `yaml:"port"` TargetPort int `yaml:"targetPort"` NodePort int `yaml:"nodePort,omitempty"` } `yaml:"ports"` } `yaml:"spec"` }
Pour désorganiser le fichier YAML dans cette structure, utilisez le code suivant :
var service Service err := yaml.Unmarshal(yourFile, &service) if err != nil { panic(err) } fmt.Print(service.Metadata.Name)
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!