微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有办法定义自定义 Go 模板操作

如何解决有没有办法定义自定义 Go 模板操作

有没有办法用文本或 html go 模板定义自定义“操作”(如范围、if、块等)。我想实现以下目标:

{{ component "blog_post" . }}
  {{ template "title" . }}
  {{ component "content" . }}
    My Content
  {{ end }}
{{ end }}

其中“组件”是我的自定义操作。

我已经使用自定义函数实现了上述功能,但它非常笨重且难以阅读。我对使用自定义操作的能力特别感兴趣,该操作既可以使用普通参数(例如 .),也可以使用任意“子项”(很像 React 组件)。

解决方法

这在 Go 模板的当前实现中是不可能的。

动作由内部 text/template/parse 包处理,并且都在 https://golang.org/src/text/template/parse/node.go 中定义。您会发现没有创建新操作的机制,因为 Tree.action 中的 parse.go 方法有一个硬编码的 switch case。

这很可悲,因为 text/template 包错过了很多可重用功能的机会。例如,有一个完整的内置 LISP 解析器无法使用,除非您通过模板解析器使用它。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。