首页 > 后端开发 > Golang > 如何从解析的 Go 模板中提取操作列表?

如何从解析的 Go 模板中提取操作列表?

Linda Hamilton
发布: 2024-12-16 12:12:11
原创
581 人浏览过

How to Extract Action Lists from a Parsed Go Template?

从解析模板获取动作列表

问题:

如何检索来自 a 的模板操作列表(例如由 {{ .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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板