从解析的模板中检索模板操作列表
如何将模板中定义的模板提取为字符串片段?考虑这样的模板:
<h1>{{ .name }} {{ .age }}</h1>
您希望获得 []string{"name", "age"}.
检查解析的模板树
解析后的模板由包含模板结构详细信息的 template.Tree 表示。该树的每个节点都有一个 Node.Type() 方法,提供有关其类型的信息。相关类型包括:
迭代树
要识别模板中的操作,您可以迭代树并探索节点。以下示例函数演示了此过程:
import ( "text/template/parse" ) 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中文网其他相关文章!