首页 > 解决方案 > 从 GO 模板获取原始源代码

问题描述

给定一个 go html 模板对象,我如何检索原始源定义?

我在文档中看不到任何功能,但必须有办法做到这一点。

标签: htmlgotemplates

解决方案


template.Template类型有一个Template.Tree导出字段,其中包含(模型)已解析的模板。

请注意,即使此字段已导出,也不会导出以供您使用,而是从文档中引用:

*parse.Tree 字段仅被导出以供 html/template 使用,并且应被所有其他客户端视为未导出。

撇开这一点不谈,有了解析树,就可以重建构建它的源代码。parse.Tree有一个Root具有方法的字段,该String()方法从树中构建源文本。

例如:

src := `Hi {{.Name}}. You are {{.Age}} years old.`
t := template.Must(template.New("").Parse(src))
fmt.Println(t.Tree.Root.String())

这将输出(在Go Playground上尝试):

Hi {{.Name}}. You are {{.Age}} years old.

如前所述:Template.Tree不是公共 API 的一部分。您可以使用它,但不能保证它会保持导出状态,并且在未来的版本中也能正常工作。您应该做的是保留您解析的源,而不是依赖Template.Tree.


推荐阅读