首頁 > 後端開發 > Golang > 主體

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

Mary-Kate Olsen
發布: 2024-11-14 11:53:02
原創
575 人瀏覽過

How to Effectively Parse Complex YAML Files in Go?

在 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中文網其他相關文章!

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