Heim > Backend-Entwicklung > Golang > Wie analysiere ich komplexe YAML-Dateien effektiv in Go?

Wie analysiere ich komplexe YAML-Dateien effektiv in Go?

Susan Sarandon
Freigeben: 2024-11-09 12:38:02
Original
373 Leute haben es durchsucht

How do I effectively parse complex YAML files in Go?

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
...
Nach dem Login kopieren

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"`
}
Nach dem Login kopieren

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)
Nach dem Login kopieren

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
Nach dem Login kopieren

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"`
}
Nach dem Login kopieren

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)
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage