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 :
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!