Maison  >  Article  >  développement back-end  >  Go Template obtient dynamiquement les variables

Go Template obtient dynamiquement les variables

PHPz
PHPzavant
2024-02-05 23:36:041240parcourir

Go Template 动态获取变量

Contenu de la question

Mes paramètres yml ressemblent à

nodes: one, two
instanceminone: 1
instancemaxone: 2
instancemintwo: 4
instancemaxtwo: 6

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 }}

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 }}

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

instance-min: {{ index $.parameters $key }}

(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) }}

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 }}`

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

instance-min: 1
instance-max: 2
instance-min: 4
instance-max: 6

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer