YAML-Dateien in Go analysieren
Problem:
Sie stoßen auf Schwierigkeiten beim Parsen von a YAML-Datei in Go. Unten ist die Beispiel-YAML-Datei, die Sie zu analysieren versuchen:
--- firewall_network_rules: rule1: src: blablabla-host dst: blabla-hostname ...
Lösung:
Um die angegebene YAML-Datei zu analysieren, müssen Sie eine Struktur erstellen, die spiegelt seine Struktur genau wider. In Ihrem Fall enthält die YAML-Datei verschachtelte Elemente, daher sollte Ihre Struktur diese Verschachtelung widerspiegeln. Die korrekte Strukturdefinition lautet:
type FirewallNetworkRule struct { Src string `yaml:"src"` Dst string `yaml:"dst"` } type Config struct { FirewallNetworkRules map[string][]FirewallNetworkRule `yaml:"firewall_network_rules"` }
Um nun die YAML-Datei in die Config-Struktur zu entmarshalieren, verwenden Sie den folgenden Code:
var config Config err := yaml.Unmarshal(yamlFile, &config) if err != nil { panic(err) } fmt.Printf("Value: %#v\n", config.FirewallNetworkRules)
Erweitertes Beispiel:
Wenn Sie mit komplexen YAML-Dateien wie Kubernetes oder dem Google Cloud-Dienst YAML arbeiten, müssen Sie möglicherweise Strukturen verschachteln, um komplexe Datenstrukturen darzustellen. Beispielsweise definiert die folgende YAML einen Kubernetes-Dienst:
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
Die entsprechende Go-Struktur für diese YAML wäre:
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"` }
Um die YAML-Datei in dieser Struktur zu entmarshalieren, verwenden Sie die folgenden Code:
var service Service err := yaml.Unmarshal(yourFile, &service) if err != nil { panic(err) } fmt.Print(service.Metadata.Name)
Das obige ist der detaillierte Inhalt vonWie analysiere ich komplexe YAML-Dateien effektiv in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!