首页 > 后端开发 > Golang > 如何从解析的 Go 模板中提取模板字段名称?

如何从解析的 Go 模板中提取模板字段名称?

Barbara Streisand
发布: 2024-12-18 21:43:18
原创
947 人浏览过

How to Extract Template Field Names from a Parsed Go Template?

从解析的模板中检索模板操作列表

如何将模板中定义的模板提取为字符串片段?考虑这样的模板:

<h1>{{ .name }} {{ .age }}</h1>
登录后复制

您希望获得 []string{"name", "age"}.

检查解析的模板树

解析后的模板由包含模板结构详细信息的 template.Tree 表示。该树的每个节点都有一个 Node.Type() 方法,提供有关其类型的信息。相关类型包括:

  • NodeAction:非控制操作,例如字段求值
  • NodeField:字段或方法名称

迭代树

要识别模板中的操作,您可以迭代树并探索节点。以下示例函数演示了此过程:

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中文网其他相关文章!

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