Maison > développement back-end > Golang > le corps du texte

Go Template obtient dynamiquement les variables

PHPz
Libérer: 2024-02-05 23:36:04
avant
1235 Les gens l'ont consulté

Go Template 动态获取变量

Contenu de la question

Mes paramètres yml ressemblent à

nodes: one, two
instanceminone: 1
instancemaxone: 2
instancemintwo: 4
instancemaxtwo: 6
Copier après la connexion

Existe-t-il un moyen de lire dynamiquement, par exemple, instanceminone à l'aide de modèles go, où le nom de la variable se compose de instancemin + la valeur dynamique de la liste de nœuds ?

Quelque chose comme ça (cela ne fonctionne évidemment pas mais donne juste une idée de ce que j'essaie de réaliser)

{{ - range $nodeName := (split .Parameters.nodes) } } } }
   instance-min: {{ .Parameters.instanceMin$nodeName }}
   instance-max: {{ .Parameters.instanceMan$nodeName }}
{{ - end }}
Copier après la connexion


Bonne réponse


Pour réaliser ce que tu veux, tu dois résoudre 2 tâches :

  • Concaténation de chaînes
  • Indexation à l'aide de valeurs dynamiques

Pour la concaténation, vous pouvez utiliser la fonction print intégrée comme

{{ $key := print "instancemin" $nodename }}
Copier après la connexion

Pour l'indexation, utilisez la fonction index intégrée :

instance-min: {{ index $.parameters $key }}
Copier après la connexion

(Remarque : {{range}} 操作会更改点,因此在其中您需要 $ pour faire référence à l'extérieur de la variable de boucle.)

ou une ligne :

instance-min: {{ index $.parameters (print "instancemin" $nodename) }}
Copier après la connexion

Voir une démo fonctionnelle :

func main() {
    t := template.must(template.new("").parse(src))

    params := map[string]any{
        "parameters": map[string]any{
            "nodes":          []string{"one", "two"},
            "instanceminone": 1,
            "instancemaxone": 2,
            "instancemintwo": 4,
            "instancemaxtwo": 6,
        },
    }

    if err := t.execute(os.stdout, params); err != nil {
        panic(err)
    }
}

const src = `{{- range $idx, $nodename := .parameters.nodes }}
   instance-min: {{ index $.parameters (print "instancemin" $nodename) }}
   instance-max: {{ index $.parameters (print "instancemax" $nodename) }}
{{- end }}`
Copier après la connexion

Cela affichera (essayez-le sur go terrain de jeu) :

instance-min: 1
instance-max: 2
instance-min: 4
instance-max: 6
Copier après la connexion

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:stackoverflow.com
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal