ホームページ >バックエンド開発 >Golang >Go で YAML ファイルを解析するにはどうすればよいですか?

Go で YAML ファイルを解析するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-29 06:07:12577ブラウズ

How do I Parse YAML Files in Go?

Go での YAML ファイルの解析

Go で YAML ファイルを解析するには、データの構造とそれを表す適切なデータ型を理解する必要があります。

例: ファイアウォール ネットワーク ルール ファイルの解析

次の YAML ファイルについて考えてみましょう。ファイアウォール ネットワーク ルール:

---
firewall_network_rules:
  rule1:
    src:       blablabla-host
    dst:       blabla-hostname
...

このファイルを解析するには、YAML コンテンツを表す Config struct を定義します:

type Config struct {
    Firewall_network_rules map[string][]string
}

その後、yaml パッケージを使用してアンマーシャルしますYAML ファイルを Config 構造体に追加します:

func main() {
    filename, _ := filepath.Abs("./fruits.yml")
    yamlFile, err := ioutil.ReadFile(filename)

    if err != nil {
        panic(err)
    }

    var config Config

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

    fmt.Printf("Value: %#v\n", config.Firewall_network_rules)
}

このアプローチは、 YAML ファイルは、Config 構造体に対応するネストされたマップ構造を使用します。

例: サービス YAML ファイルの解析

Kubernetes サービス マニフェストのようなより複雑な 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"`
}

次に、YAML ファイルをこれにアンマーシャリングします。 struct:

var service Service

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

fmt.Print(service.Metadata.Name)

YAML 構造に一致する適切な構造体を使用することで、Go で複雑な YAML データを効果的に解析して表現できます。

以上がGo で YAML ファイルを解析するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。