在 `{{ template }}` 中使用 Go Template var

Using a Go Template var inside of a `{{ template }}`

在 Go 中我们可以很容易地创建一个变量

{{- if .Bool.Var -}}
  {{ $MyVar := "val" }}
{{- end -}}

我们甚至可以轻松创建共享片段

{{- define "val" -}}
  <p>Some shared template data</p>
{{- end -}}

我的问题 是,我们如何使用 $MyVar 作为 {{template}} 的文本值这样我们就可以做类似 {{template $MyVar}} 的事情而不会导致错误,或者这不可能吗?

在纯 Go text/template language 中(这不是 Go 本身 但恰好在 Go 中实现的不同的东西)这是不可能的; {{template}} 调用采用文字字符串名称。

这种语言最著名的用户之一是 Kubernetes Helm deployment manager. That includes several extensions to the template language. One of those is an include template function that can take any value as the name of the template, and produces a string rather than immediately outputting the template contents (you can include it in a pipeline, which you can't with template). So specifically in a YAML 文件,您可以

{{ include $MyVar }}