Heim >Backend-Entwicklung >Golang >Wie extrahiere ich Vorlagenfeldnamen aus einer geparsten Go-Vorlage?
Abrufen einer Liste von Vorlagenaktionen aus einer analysierten Vorlage
Wie können Sie die in einer Vorlage definierten Vorlagen als String-Segment extrahieren? Betrachten Sie eine Vorlage wie:
<h1>{{ .name }} {{ .age }}</h1>
Sie möchten []string{"name", "age"} erhalten.
Inspizieren des analysierten Vorlagenbaums
Die analysierte Vorlage wird durch einen template.Tree dargestellt, der Details zur Vorlagenstruktur enthält. Jeder Knoten dieses Baums verfügt über eine Node.Type()-Methode, die Informationen über seinen Typ bereitstellt. Zu den relevanten Typen gehören:
Iterating the Tree
Um Aktionen innerhalb der Vorlage zu identifizieren, können Sie den Baum durchlaufen und erkunden Knoten. Die folgende Beispielfunktion demonstriert diesen Prozess:
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 }
Beispielverwendung
Um die für die Vorlage erforderlichen Felder zu bestimmen:
t := template.Must(template.New("cooltemplate"). Parse(`<h1>{{ .name }} {{ .age }}</h1>`)) fmt.Println(ListTemplFields(t))
Die Die Ausgabe lautet:
[{{.name}} {{.age}}]
Hinweis: Diese Demonstration ist nicht umfassend und kann möglicherweise nicht alle Fälle bearbeiten. Es veranschaulicht jedoch das Konzept des Extrahierens von Vorlagenaktionen durch Introspektion des analysierten Vorlagenbaums.
Das obige ist der detaillierte Inhalt vonWie extrahiere ich Vorlagenfeldnamen aus einer geparsten Go-Vorlage?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!