首頁 >後端開發 >Golang >如何以程式設計方式從解析的 Go 模板中提取字段操作?

如何以程式設計方式從解析的 Go 模板中提取字段操作?

Barbara Streisand
Barbara Streisand原創
2024-12-18 11:46:10812瀏覽

How to Programmatically Extract Field Actions from Parsed Go Templates?

了解從解析範本中擷取範本欄位

簡介:

簡介:

以程式設計方式擷取清單在解析的Go 範本中定義的範本操作是某些場景中的常見任務。本文探討了一種使用 Template.Tree 欄位來實現此目的的技術。

解析模板的檢查

模板的解析表示儲存在 Template.Tree 中字段,可作為 parse.Tree 實例存取。樹包含模板的所有元件,包括操作、文字和控制結構。

識別模板操作

模板操作,例如字段評估和函數調用,由具有 parse.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
}

以下代碼演示了檢索模板操作列表的示例實現:

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

示例用法

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

輸出

注意事項:雖然此技術通常允許提取來自模板的字段操作,它有局限性。例如,它不處理所有控制結構和複雜的模板語法。它旨在演示基本概念,並應進行相應調整。

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

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