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 サイトの他の関連記事を参照してください。