Использование var шаблона Go внутри `{{ template }}`

В Go мы можем достаточно легко создать переменную с помощью

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

Мы даже можем достаточно легко создавать общие сниппеты

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

Мой вопрос: как нам использовать $MyVar в качестве текстового значения для {{template}}, чтобы мы могли делать что-то вроде {{template $MyVar}}, не вызывая ошибки, или это невозможно? ?


person Jordon Bedwell    schedule 09.11.2018    source источник


Ответы (1)


В чистом языке Go text/template (который не сам по себе Go, а что-то вроде другой, который реализован в Go) это невозможно; вызов {{template}} принимает буквальное строковое имя.

Одним из наиболее известных пользователей этого языка является диспетчер развертывания Helm Kubernetes. Это включает в себя несколько расширений языка шаблонов. Одной из них является include шаблонная функция, которая может принимать любое значение в качестве имени. шаблона и создает строку, а не сразу выводит содержимое шаблона (вы можете включить его в конвейер, чего нельзя сделать с template). В частности, в kubernetes-helm YAML, вы можете

{{ include $MyVar }}
person David Maze    schedule 09.11.2018
comment
Спасибо! В итоге я сделал что-то близкое к тому, что делают они, и создал template.FuncMap с тегом include, который принимает переменную и контекст, поэтому я могу взять это определение и передать его обратно. Не очень идеально, но работает. - person Jordon Bedwell; 10.11.2018