Maison >développement back-end >Golang >Comment extraire par programme des actions de champ à partir de modèles Go analysés ?

Comment extraire par programme des actions de champ à partir de modèles Go analysés ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-18 11:46:10816parcourir

How to Programmatically Extract Field Actions from Parsed Go Templates?

Comprendre l'extraction des champs de modèle à partir de modèles analysés

Introduction :

Récupération par programme d'une liste de Les actions de modèle définies dans les modèles Go analysés sont une tâche courante dans certains scénarios. Cet article explore une technique pour y parvenir en utilisant le champ Template.Tree.

Inspection des modèles analysés

La représentation analysée d'un modèle est stockée dans Template.Tree champ, accessible en tant qu’instance parse.Tree. Cet arbre contient tous les composants d'un modèle, y compris les actions, les textes et les structures de contrôle.

Identification des actions du modèle

Actions du modèle, telles que l'évaluation des champs et les appels de fonction. , sont représentés par des nœuds de type parse.NodeAction. Pour extraire une liste de ces actions de l'arborescence, nous pouvons parcourir récursivement sa structure et vérifier le type de chaque nœud.

Exemple d'implémentation

Le code suivant démontre un exemple d'implémentation qui récupère une liste d'actions de modèle :

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
}

Exemple Utilisation

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

Sortie

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

Mises en garde :

Bien que cette technique permette généralement d'extraire actions sur le terrain à partir de modèles, il a des limites. Par exemple, il ne gère pas toutes les structures de contrôle et la syntaxe complexe des modèles. Il est destiné à démontrer les concepts sous-jacents et doit être adapté en conséquence.

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