首頁 > 後端開發 > Golang > 如何在 Go 中有效解析複雜的 YAML 檔案?

如何在 Go 中有效解析複雜的 YAML 檔案?

Susan Sarandon
發布: 2024-11-09 12:38:02
原創
373 人瀏覽過

How do I effectively parse complex YAML files in Go?

在Go 中解析YAML 檔案

問題:

問題:
---
firewall_network_rules:
  rule1:
    src:       blablabla-host
    dst:       blabla-hostname
...
登入後複製

您在解析Go 中的您在解析Go 中的分析YAML 檔案。以下是您嘗試解析的範例YAML 檔案:

解決方案:
type FirewallNetworkRule struct {
    Src string `yaml:"src"`
    Dst string `yaml:"dst"`
}

type Config struct {
    FirewallNetworkRules map[string][]FirewallNetworkRule `yaml:"firewall_network_rules"`
}
登入後複製

要解析給定的YAML 文件,您需要建立一個結構體準確地反映其結構。在您的情況下,YAML 檔案包含巢狀元素,因此您的結構應該會鏡像該巢狀。正確的結構定義是:
var config Config

err := yaml.Unmarshal(yamlFile, &config)
if err != nil {
    panic(err)
}

fmt.Printf("Value: %#v\n", config.FirewallNetworkRules)
登入後複製

現在,要將YAML 檔案解組到Config 結構中,請使用以下程式碼:

進階範例:
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
登入後複製

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"`
}
登入後複製
進階範例:

var service Service

err := yaml.Unmarshal(yourFile, &service)
if err != nil {
    panic(err)
}

fmt.Print(service.Metadata.Name)
登入後複製
進階範例: 使用複雜的YAML 檔案(例如Kubernetes 或Google Cloud 服務YAML)時,您可能需要巢狀結構來表示複雜的資料結構。例如,以下YAML 定義了Kubernetes 服務:此YAML 對應的Go 結構將是:要將YAML 檔案解組到此結構中,請使用以下代碼:

以上是如何在 Go 中有效解析複雜的 YAML 檔案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板