ホームページ >バックエンド開発 >Golang >Go for Terraform で動的 JSON フィールド タグを生成するにはどうすればよいですか?

Go for Terraform で動的 JSON フィールド タグを生成するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-13 22:54:17936ブラウズ

How to Generate Dynamic JSON Field Tags in Go for Terraform?

Go での動的 JSON フィールド タグの生成

Go では、JSON マーシャリングにフィールド タグを使用して、構造体フィールドを JSON キーにマップする方法を指定します。ただし、Terraform JSON を扱う場合、フィールド名が動的であるか、コンパイル時に不明になる場合があります。これは、フィールド タグを使用して JSON を生成するときに問題になる可能性があります。

静的フィールド タグを使用した現在のアプローチ

提供されたコードは、フィールド タグを使用して Terraform ファイルの JSON を生成する試みを示しています。ただし、web1 のような動的識別子では問題が発生し、そのような名前に対して静的フィールド タグを定義することが不可能になります。

type Resource struct {
    AwsResource AwsResource `json:"aws_instance,omitempty"` // Static
}

type AwsResource struct {
    AwsWebInstance AwsWebInstance `json:"web1,omitempty"` // Dynamic
}

代替: マップを使用する

動的フィールド名を処理するには、代替戦略雇用されなければなりません。実行可能なオプションの 1 つは、マップを利用することです:

type Resource struct {
    AWSInstance map[string]AWSInstance `json:"aws_instance"` // Map of dynamic instance names and their configuration
}

type AWSInstance struct {
    AMI string `json:"ami"`
    Count int `json:"count"`
    SourceDestCheck bool `json:"source_dest_check"`
}

このアプローチでは、Resource 構造体の AWSInstance フィールドは、動的インスタンス名 (「web1」、「web2」など) をマップするマップです。

使用例

必要な JSON を生成するには、マップにデータを入力します。動的:

r := Resource{
    AWSInstance: map[string]AWSInstance{
        "web1": AWSInstance{
            AMI:   "qdx",
            Count: 2,
        },
    },
}

このマップをマーシャリングして、目的の JSON 出力を生成できます。さらに詳しく説明するために、プレイグラウンドの例を示します。

マップを活用することで、このアプローチにより、動的キーによる JSON の柔軟なマーシャリングが可能になり、Go の可変フィールド タグの課題に効果的に対処できます。

以上がGo for Terraform で動的 JSON フィールド タグを生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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