在 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 }
處理動態欄位名稱,替代策略必須受僱。一個可行的選擇是利用映射:
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 輸出。提供了一個 Playground 範例以供進一步說明。
透過利用映射,這種方法允許使用動態鍵靈活地編組 JSON,有效解決 Go 中可變字段標籤的挑戰。
以上是如何在 Go 中為 Terraform 產生動態 JSON 欄位標籤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!