如何在 Go 中访问模板“操作”
模板提供了一种将数据呈现为结构化文本的强大方法。在某些情况下,可能需要内省模板以确定它定义的操作列表。
模板结构
解析的模板表示为一棵树节点。每个节点代表模板中的特定构造,例如文本、操作或控制结构。
识别操作
操作是定义如何检索数据的节点或加工过的。它们可用于访问数据模型中的字段或调用函数。要识别树中的操作节点,请检查 parse.NodeAction 类型的节点。
示例实现
这是一个示例函数,它递归地遍历模板树并收集所有操作节点:
func ListTemplateActions(t *template.Template) []string { return listNodeActions(t.Tree.Root, nil) } func listNodeActions(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 = listNodeActions(n, res) } } return res }
此函数返回包含每个操作的文本表示的字符串切片node.
用法
要使用此函数,请解析模板,然后调用 ListTemplateActions。例如:
t := template.Must(template.New("test"). Parse(`<p>{{ .name }} - {{ .age }}</p>`)) fmt.Println(ListTemplateActions(t))
输出:
[{{.name}} {{.age}}]
此演示展示了如何识别和检索已解析模板中定义的操作列表,允许您确定它期望的输入和相应地动态构建数据模型。
以上是如何从 Go 模板中提取操作列表?的详细内容。更多信息请关注PHP中文网其他相关文章!