Comment accéder aux modèles « Actions » dans Go
Les modèles fournissent un moyen puissant de restituer des données en texte structuré. Dans certains cas, il peut être souhaitable d'introspecter un modèle pour déterminer la liste d'actions qu'il définit.
Structure du modèle
Un modèle analysé est représenté sous la forme d'un arbre de nœuds. Chaque nœud représente une construction spécifique au sein du modèle, telle que du texte, des actions ou des structures de contrôle.
Identification des actions
Les actions sont des nœuds qui définissent la manière dont les données doivent être récupérées. ou transformés. Ils peuvent être utilisés pour accéder à des champs ou appeler des fonctions dans le modèle de données. Pour identifier les nœuds d'action dans l'arborescence, recherchez les nœuds de type parse.NodeAction.
Exemple de mise en œuvre
Voici un exemple de fonction qui parcourt de manière récursive l'arborescence des modèles et collecte tous nœuds d'action :
func ListTemplateActions(t *template.Template) []string { return listNodeActions(t.Tree.Root, nil) } func listNodeActions(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 = listNodeActions(n, res) } } return res }
Cette fonction renvoie une tranche de chaînes contenant la représentation textuelle de chaque action node.
Utilisation
Pour utiliser cette fonction, analysez le modèle, puis appelez ListTemplateActions. Par exemple :
t := template.Must(template.New("test"). Parse(`<p>{{ .name }} - {{ .age }}</p>`)) fmt.Println(ListTemplateActions(t))
Sortie :
[{{.name}} {{.age}}]
Cette démonstration montre comment identifier et récupérer une liste d'actions définies dans un modèle analysé, vous permettant de déterminer l'entrée qu'il attend et construire dynamiquement le modèle de données 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!