Heim >Backend-Entwicklung >Golang >Wie extrahiere ich Vorlagenfeldnamen aus einer geparsten Go-Vorlage?

Wie extrahiere ich Vorlagenfeldnamen aus einer geparsten Go-Vorlage?

Barbara Streisand
Barbara StreisandOriginal
2024-12-18 21:43:18938Durchsuche

How to Extract Template Field Names from a Parsed Go Template?

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:

  • NodeAction: Nicht-kontrollierende Aktionen wie Feldauswertungen
  • NodeField: Feld- oder Methodennamen

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn