Parsen einer YAML-Datei in Go
Das Parsen von YAML-Dateien in Go erfordert die Verwendung der YAML-Bibliothek, die über gopkg.in/yaml.v2 verfügbar ist. Der bereitgestellte Code dient zum Parsen einer YAML-Datei mit verschachtelten Schlüssel-Wert-Paaren wie dem folgenden:
firewall_network_rules: rule1: src: blablabla-host dst: blabla-hostname
Allerdings treten Probleme auf, wenn versucht wird, Schlüssel-Wert-Paare ohne begleitende Werte zu analysieren. Die implementierte Struktur definiert diese Werte nicht, was zu einem Fehler beim Parsen führt.
Um dieses Problem zu beheben, sollten Sie erwägen, ein reales YAML-Beispiel einzubinden, beispielsweise eine service.yaml von Google Cloud oder 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
Dieses Beispiel demonstriert verschachtelte Schlüssel-Wert-Beziehungen und bietet einen praktischen Anwendungsfall. Die entsprechende Go-Struktur würde wie folgt aussehen:
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"` } Spec struct { Type string `yaml:"type"` Selector struct { App string `yaml:"app"` } Ports []struct { Name string `yaml:"name"` Port int `yaml:"port"` TargetPort int `yaml:"targetPort"` NodePort int `yaml:"nodePort,omitempty"` } `yaml:"ports"` } }
Um den Prozess zu vereinfachen, bieten Dienste wie yaml-to-go und json-to-go praktische Tools zum Konvertieren von YAML in Go-Strukturen, wodurch die Parsing-Aufgabe einfacher zu verwalten ist.
Abschließend: Um die YAML-Datei in Ihrer Struktur zu entmarshalieren, können Sie den folgenden Code verwenden:
var service Service err := yaml.Unmarshal(yourFile, &service) if err != nil { panic(err) }
Dieser Ansatz ermöglicht den Zugriff auf die analysierten Daten über die Servicestruktur und ermöglicht Ihnen die Interaktion mit den Informationen der YAML-Datei in Ihrer Go-Anwendung.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3