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

Wie extrahiere ich Aktionslisten aus einer geparsten Go-Vorlage?

Linda Hamilton
Linda HamiltonOriginal
2024-12-16 12:12:11588Durchsuche

How to Extract Action Lists from a Parsed Go Template?

Erhalten einer Aktionsliste aus einer geparsten Vorlage

Frage:

Wie kann ich abrufen eine Liste von Vorlagenaktionen (z. B. die durch {{ .blahblah }} definierten) aus einem analysierten Vorlage?

Vorwort:

Das Feld „Template.Tree“ sollte, wie bereits erwähnt, nicht für die Eingabebereitstellung bei der Vorlagenausführung herangezogen werden. Es ist wichtig, die Vorlage und ihre erwarteten Daten im Voraus zu definieren.

Lösung:

Um eine analysierte Vorlage zu überprüfen, navigieren Sie durch deren Analysebaum (template.Template.Tree). . Knoten in diesem Baum repräsentieren verschiedene Elemente, einschließlich Vorlagenaktionen. Hier konzentrieren wir uns auf Knoten vom Typ parse.NodeAction (Als Felder ausgewertete Aktionen).

Codebeispiel:

Der folgende Code durchläuft den Analysebaum rekursiv, um Knoten zu identifizieren mit der NodeAction Typ:

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
}

Verwendung:

Rufen Sie die ListTemplFields-Funktion für eine analysierte Vorlage auf, um eine Liste von Aktionstoken abzurufen:

t := template.Must(template.New("cooltemplate").
    Parse(`<h1>{{ .name }} {{ .age }}</h1>`))
fmt.Println(ListTemplFields(t))

Ausgabe:

Die Ausgabe für die bereitgestellte Vorlage wird sein:

[{{.name}} {{.age}}]

Das obige ist der detaillierte Inhalt vonWie extrahiere ich Aktionslisten 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