了解從解析範本中擷取範本欄位
簡介:
簡介:以程式設計方式擷取清單在解析的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中文網其他相關文章!