在 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中文网其他相关文章!