Menghuraikan Fail YAML dalam Go
Masalah:
Anda menghadapi kesukaran menghuraikan Fail YAML dalam Go. Di bawah ialah contoh fail YAML yang anda cuba huraikan:
--- firewall_network_rules: rule1: src: blablabla-host dst: blabla-hostname ...
Penyelesaian:
Untuk menghuraikan fail YAML yang diberikan, anda perlu mencipta struct yang mencerminkan strukturnya dengan tepat. Dalam kes anda, fail YAML mengandungi elemen bersarang, jadi struct anda harus mencerminkan sarang itu. Definisi struct yang betul ialah:
type FirewallNetworkRule struct { Src string `yaml:"src"` Dst string `yaml:"dst"` } type Config struct { FirewallNetworkRules map[string][]FirewallNetworkRule `yaml:"firewall_network_rules"` }
Sekarang, untuk menyahmarshal fail YAML ke dalam struct Config, gunakan kod berikut:
var config Config err := yaml.Unmarshal(yamlFile, &config) if err != nil { panic(err) } fmt.Printf("Value: %#v\n", config.FirewallNetworkRules)
Contoh Lanjutan:
Apabila bekerja dengan fail YAML yang kompleks, seperti Kubernetes atau perkhidmatan Google Cloud YAML, anda boleh perlu menyusun struct untuk mewakili struktur data yang kompleks. Sebagai contoh, YAML berikut mentakrifkan perkhidmatan 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
Struktur Go yang sepadan untuk YAML ini ialah:
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"` }
Untuk menyahmarshal fail YAML ke dalam struct ini, gunakan kod berikut:
var service Service err := yaml.Unmarshal(yourFile, &service) if err != nil { panic(err) } fmt.Print(service.Metadata.Name)
Atas ialah kandungan terperinci Bagaimanakah cara saya menghuraikan fail YAML kompleks dalam Go dengan berkesan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!