Maison > développement back-end > Golang > Comment générer des balises de champ JSON dynamiques dans Go pour Terraform ?

Comment générer des balises de champ JSON dynamiques dans Go pour Terraform ?

Mary-Kate Olsen
Libérer: 2024-12-13 22:54:17
original
933 Les gens l'ont consulté

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

Génération de balises de champ JSON dynamiques dans Go

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.

Approche actuelle avec des balises de champ statiques

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
}
Copier après la connexion

Alternative : utiliser Maps

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"`
}
Copier après la connexion

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.

Exemple d'utilisation

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,
        },
    },
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal