html - 从 GO 模板获取原始源代码
问题描述
给定一个 go html 模板对象,我如何检索原始源定义?
我在文档中看不到任何功能,但必须有办法做到这一点。
解决方案
该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
.
推荐阅读
- regex - Angular 7电话号码验证器模式
- python - 如何不断显示随机数tkinter
- rust - 如何在 cargo.toml 文件中将特定版本的依赖项列入黑名单?
- python - Pandas 复制列元素并根据相关列表应用于另一列
- php - 如何在laravel中制定导航栏链接到其页面?
- azure - Azure 服务总线 AMQP 对象接收器已中止
- python - 如何在设置和创建时自动生成 sqlalchemy 关系?
- ios - 为什么无法将 `(()->Void)` 转换为 `(()->Void)?
- java - Liskov 的替换原则如何适用于 Object 等类?
- reactjs - 如何引起对重新渲染复选框的反应