【问题标题】:Is there a way to define custom Go Template Actions有没有办法定义自定义 Go 模板操作
【发布时间】:2021-07-26 07:48:36
【问题描述】:

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

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

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

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

【问题讨论】:

  • 如果您的意思是为模板占位符生成操作,您应该使用 go 代码生成工具。 golang.org/pkg/text/template
  • 所以在 golang 模板库中,解析器表示具有“end”关键字作为操作的事物。比如范围、with、if 等。我想做一个自定义操作。

标签: go go-templates sprig-template-functions


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2012-11-03
    • 1970-01-01
    • 2019-04-28
    • 1970-01-01
    • 2019-11-28
    • 1970-01-01
    • 2019-12-21
    • 2011-04-15
    • 2019-08-16
    相关资源
    最近更新 更多