Grundlegendes zum Extrahieren von Vorlagenfeldern aus geparsten Vorlagen
Einführung:
Programmgesteuertes Abrufen einer Liste von In geparsten Go-Vorlagen definierte Vorlagenaktionen sind in bestimmten Szenarien eine häufige Aufgabe. In diesem Artikel wird eine Technik untersucht, um dies mithilfe des Template.Tree-Felds zu erreichen.
Inspektion geparster Vorlagen
Die geparste Darstellung einer Vorlage wird im Template.Tree gespeichert Feld, zugänglich als parse.Tree-Instanz. Dieser Baum enthält alle Komponenten einer Vorlage, einschließlich Aktionen, Texte und Kontrollstrukturen.
Vorlagenaktionen identifizieren
Vorlagenaktionen, wie z. B. Feldauswertung und Funktionsaufrufe werden durch Knoten mit dem Typ parse.NodeAction dargestellt. Um eine Liste dieser Aktionen aus dem Baum zu extrahieren, können wir seine Struktur rekursiv durchlaufen und den Typ jedes Knotens überprüfen.
Beispielimplementierung
Der folgende Code demonstriert eine Beispielimplementierung, die eine Liste von Vorlagenaktionen abruft:
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 }
Beispiel Verwendung
t := template.Must(template.New("cooltemplate"). Parse(`<h1>{{ .name }} {{ .age }}</h1>`)) fmt.Println(ListTemplFields(t))
Ausgabe
[{{.name}} {{.age}}]
Vorbehalte:
Während diese Technik im Allgemeinen das Extrahieren ermöglicht Wenn Sie Feldaktionen aus Vorlagen verwenden möchten, gibt es Einschränkungen. Beispielsweise werden nicht alle Kontrollstrukturen und die komplexe Vorlagensyntax verarbeitet. Es ist als Demonstration der zugrunde liegenden Konzepte gedacht und sollte entsprechend angepasst werden.
Das obige ist der detaillierte Inhalt vonWie extrahiere ich Feldaktionen programmgesteuert aus geparsten Go-Vorlagen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!