從解析模板取得動作清單
問題:
如何擷取來自來自來自的模板操作列表(例如由{{ .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中文網其他相關文章!