Dans Go, les balises de champ sont utilisées pour le marshalling JSON afin de spécifier comment les champs de structure sont mappés aux clés JSON. Cependant, lorsqu'il s'agit de Terraform JSON, il existe des cas où les noms de champs peuvent être dynamiques ou inconnus au moment de la compilation. Cela peut poser un défi lors de l'utilisation de balises de champ pour générer du JSON.
Le code fourni illustre une tentative d'utilisation de balises de champ pour générer du JSON pour un fichier Terraform. Cependant, le problème se pose avec les identifiants dynamiques comme web1, ce qui rend impossible la définition de balises de champ statiques pour de tels noms :
type Resource struct { AwsResource AwsResource `json:"aws_instance,omitempty"` // Static } type AwsResource struct { AwsWebInstance AwsWebInstance `json:"web1,omitempty"` // Dynamic }
Pour gérer les noms de champs dynamiques, des stratégies alternatives doit être employé. Une option viable consiste à utiliser des cartes :
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"` }
Dans cette approche, le champ AWSInstance dans la structure Resource est une carte qui mappe les noms d'instances dynamiques (tels que "web1", "web2", etc.) à leur configuration respective.
Pour générer le JSON souhaité, on peut remplir la carte dynamiquement :
r := Resource{ AWSInstance: map[string]AWSInstance{ "web1": AWSInstance{ AMI: "qdx", Count: 2, }, }, }
Cette carte peut ensuite être marshalée pour produire la sortie JSON souhaitée. Un exemple de terrain de jeu est fourni pour une illustration plus approfondie.
En exploitant les cartes, cette approche permet un regroupement flexible de JSON avec des clés dynamiques, relevant efficacement le défi des balises de champ variable dans Go.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!