Étant donné un modèle analysé, comment pouvons-nous récupérer une liste de toutes les actions défini en son sein ?
Notez que la méthode que nous utiliserons, Template.Tree, n'est pas destinée à un usage externe. Il est exporté uniquement pour le fonctionnement interne du package html/template. S'en fier dans votre code peut entraîner un comportement inattendu dans les futures versions du package.
Un modèle analysé est représenté en interne sous la forme d'un arbre (parse.Tree) comprenant différents nœuds. Chaque nœud représente un élément spécifique dans le modèle, tel que du texte, des champs, des appels de fonction, etc.
Pour trouver les actions, nous parcourrons cet arbre de manière récursive, à la recherche de nœuds de type parse.NodeAction . Ces nœuds représentent des actions sans contrôle, telles que des évaluations sur le terrain.
import ( "fmt" "html/template" "text/template/parse" ) func ListTemplateFields(t *template.Template) []string { return listNodeFields(t.Tree.Root, nil) } func listNodeFields(node parse.Node, results []string) []string { if node.Type() == parse.NodeAction { results = append(results, node.String()) } if listNode, ok := node.(*parse.ListNode); ok { for _, n := range listNode.Nodes { results = listNodeFields(n, results) } } return results }
t := template.Must(template.New("example").Parse(`{{ .name }} {{ .age }}`)) fields := ListTemplateFields(t) fmt.Println(fields)
[{{.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!