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!