首頁 >後端開發 >Golang >如何從解析的 Go 模板中提取操作列表?

如何從解析的 Go 模板中提取操作列表?

Linda Hamilton
Linda Hamilton原創
2024-12-16 12:12:11584瀏覽

How to Extract Action Lists from a Parsed Go Template?

從解析模板取得動作清單

問題:

如何擷取來自來自來自的模板操作列表(例如由{{ .blahblah }} 定義的操作)解析的模板?

前言:

如上所述,Template.Tree 欄位不應依賴於範本執行中的輸入提供。預先定義模板及其預期資料至關重要。

解決方案:

要檢查已解析的模板,請導航其解析樹 (template.Template.Tree) 。該樹中的節點代表各種元素,包括模板操作。在這裡,我們關注 parse.NodeAction 類型的節點(作為欄位計算的操作)。

代碼示例:

以下代碼遞歸遍歷解析樹以識別節點使用NodeAction類型:

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
}

用法:

在解析的範本上呼叫ListTemplFields函數以擷取操作標記清單:

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

輸出:

提供的範本的輸出將是:

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

以上是如何從解析的 Go 模板中提取操作列表?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn