「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Go でネストされたキーと値のペアを含む YAML ファイルを解析するにはどうすればよいですか?

Go でネストされたキーと値のペアを含む YAML ファイルを解析するにはどうすればよいですか?

2024 年 11 月 16 日に公開
ブラウズ:997

How to Parse a YAML File with Nested Key-Value Pairs in Go?

Go での YAML ファイルの解析

Go での YAML ファイルの解析には、gopkg.in/yaml.v2 から利用できる YAML ライブラリを利用することが含まれます。提供されたコードは、次のようなネストされたキーと値のペアを含む YAML ファイルを解析するように設計されています:

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

ただし、値を伴わずにキーと値のペアを解析しようとすると問題が発生します。実装された構造体ではこれらの値が定義されていないため、解析中にエラーが発生します。

この問題に対処するには、Google Cloud や Kubernetes の service.yaml などの実際の 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