Maison > développement back-end > Golang > Comment extraire les noms de champs d'un modèle à partir d'un modèle Go analysé ?

Comment extraire les noms de champs d'un modèle à partir d'un modèle Go analysé ?

Barbara Streisand
Libérer: 2024-12-18 21:43:18
original
946 Les gens l'ont consulté

How to Extract Template Field Names from a Parsed Go Template?

Récupération d'une liste d'actions de modèle à partir d'un modèle analysé

Comment extraire les modèles définis dans un modèle en tant que tranche de chaînes ? Considérez un modèle tel que :

<h1>{{ .name }} {{ .age }}</h1>
Copier après la connexion

Vous souhaitez obtenir []string{"name", "age"}.

Inspection de l'arborescence des modèles analysés

Le modèle analysé est représenté par un template.Tree contenant des détails sur la structure du modèle. Chaque nœud de cet arbre possède une méthode Node.Type() qui fournit des informations sur son type. Les types pertinents incluent :

  • NodeAction : actions sans contrôle telles que les évaluations de champs
  • NodeField : noms de champs ou de méthodes

Itération de l'arborescence

Pour identifier les actions dans le modèle, vous pouvez parcourir l'arborescence et explorer les nœuds. L'exemple de fonction suivant illustre ce processus :

import (
    "text/template/parse"
)

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

Exemple d'utilisation

Pour déterminer les champs requis pour le modèle :

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

Le le résultat sera :

[{{.name}} {{.age}}]
Copier après la connexion

Remarque : Cette démonstration n'est pas exhaustive et peut ne pas traiter tous les cas. Cependant, il illustre le concept d'extraction d'actions de modèle en introspectant l'arborescence de modèles analysée.

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