Maison >développement back-end >Golang >Comment extraire des Scripts d'Actions à partir d'un modèle Go analysé ?

Comment extraire des Scripts d'Actions à partir d'un modèle Go analysé ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-16 12:12:11589parcourir

How to Extract Action Lists from a Parsed Go Template?

Obtention d'un liste d'actions à partir d'un modèle analysé

Question :

Comment puis-je récupérer une liste d'actions de modèle (telles que celles définies par {{ .blahblah }}) à partir d'un modèle ?

Avant-propos :

Le champ Template.Tree, comme mentionné, ne doit pas être utilisé pour la fourniture d'entrées dans l'exécution du modèle. Il est crucial de définir au préalable le modèle et ses données attendues.

Solution :

Pour inspecter un modèle analysé, parcourez son arbre d'analyse (template.Template.Tree) . Les nœuds de cette arborescence représentent divers éléments, y compris les actions de modèle. Ici, nous nous concentrons sur les nœuds de type parse.NodeAction (actions évaluées en tant que champs).

Exemple de code :

Le code suivant parcourt l'arbre d'analyse de manière récursive pour identifier les nœuds. avec le NodeAction tapez :

func ListTemplFields(t *template.Template) []string {
    return listNodeFields(t.Tree.Root, nil)
}

func listNodeFields(node parse.Node, res []string) []string {
    if node.Type() == parse.NodeAction {
        res = append(res, node.String())
    }

    if ln, ok := node.(*parse.ListNode); ok {
        for _, n := range ln.Nodes {
            res = listNodeFields(n, res)
        }
    }
    return res
}

Utilisation :

Invoquez la fonction ListTemplFields sur un modèle analysé pour récupérer une liste de jetons d'action :

t := template.Must(template.New("cooltemplate").
    Parse(`<h1>{{ .name }} {{ .age }}</h1>`))
fmt.Println(ListTemplFields(t))

Sortie :

La sortie du modèle fourni sera être :

[{{.name}} {{.age}}]

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