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
Barbara Streisandoriginal
2024-12-18 21:43:18941parcourir

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>

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
}

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

Le le résultat sera :

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

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!

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