在 Go 中有效解析 YAML 檔案
了解如何在 Go 中準確解析 YAML 檔案對於各種應用程式至關重要。透過使用定義良好的 Go 結構,可以有效地與 YAML 資料進行互動。
問題陳述
在您的查詢中,您描述了無法解析以下YAML 檔案的問題使用Go:
--- firewall_network_rules: rule1: src: blablabla-host dst: blabla-hostname ...
此外,您嘗試使用以下Go code:
type Config struct { Firewall_network_rules map[string][]string } ... err = yaml.Unmarshal(yamlFile, &config)
但是,這種方法會導致錯誤,可能是由於src 和 dst 鍵值對缺少對應的結構。
解決方案
當YAML 檔案由列表組成時,以下方法將就足夠了:
--- firewall_network_rules: rule1: - value1 - value2 ...
但是,對於更複雜的YAML 結構,例如您提供的範例service.yaml:
apiVersion: v1 kind: Service ...
您將需要定義自訂 Go 結構以符合巢狀的YAML 的結構。例如:
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"` }
定義 Go 結構後,您可以使用 yaml.Unmarshal() 函數將 YAML 資料解析為這些結構。例如:
var service Service err = yaml.Unmarshal(yourFile, &service)
透過遵循這些技術,您可以有效地解析 YAML 檔案並在 Go 應用程式中利用資料。請記住自訂您的 Go 結構以符合 YAML 檔案的特定結構。
以上是如何在Go中有效解析複雜的YAML檔?的詳細內容。更多資訊請關注PHP中文網其他相關文章!