在 Go 中解析 YAML 檔案
在 Go 中解析 YAML 檔案涉及利用 gopkg.in/yaml.v2 提供的 YAML 函式庫。提供的程式碼旨在解析具有巢狀鍵值對的 YAML 文件,如下所示:
firewall_network_rules: rule1: src: blablabla-host dst: blabla-hostname
但是,在嘗試解析沒有附帶值的鍵值對時會出現問題。實現的結構體沒有定義這些值,導致解析期間出錯。
要解決此問題,請考慮合併真實的 YAML 範例,例如來自 Google Cloud 或 Kubernetes 的 service.yaml:
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
此範例示範了巢狀鍵值關係並提供了實際用例。對應的 Go 結構類似:
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"` } }
為了簡化流程,yaml-to-go 和 json-to-go 等服務提供了方便的工具來將 YAML 轉換為 Go 結構體,使解析任務更易於管理。
最後,要將 YAML 檔案解組到您的結構中,您可以使用以下程式碼:
var service Service err := yaml.Unmarshal(yourFile, &service) if err != nil { panic(err) }
此方法允許透過服務結構存取已解析的數據,從而允許您在 Go 應用程式中與 YAML 檔案的資訊進行互動。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3