Maison >développement back-end >Golang >Comment extraire par programme des actions de champ à partir de modèles Go analysés ?
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!