Как выполнить шаблон Golang, когда "{" или "}" находятся в статической части шаблона?
Моя проблема в том, что я хочу создать генератор писем, который сначала создает латексный файл с пользовательского ввода, а затем компилирует его через латекс в PDF.
Шаблон содержит несколько строк:
\setkomavar{signature}{{{.Name}}}
Часть latex
\setkomavar{signature}{}
, а часть template
из go - {{.Name}}
.
Когда я пытаюсь загрузить шаблон, он выдает эту ошибку:
panic: template: letter.tmpl: 72: неожиданно "}" в команде
Есть ли трюк, чтобы помочь синтаксическому анализатору справиться с такой ситуацией?
Спасибо заранее,
Тина
Ответы
Ответ 1
Используйте Template.Delims, чтобы задать разделители для некоторого не противоречащего текста. {{
и }}
являются только значениями по умолчанию, этот метод позволяет выбирать другие разделители.
Альтернативный метод: в вашем шаблоне, где вы хотите использовать латекс {
и }
, вместо этого вы можете вставить некоторый безопасный текст, например сказать #(
и )#
, а затем сделать "глобальную" замену на выходе из шаблона. Однако установка разделителей намного проще ИМО и, скорее всего, более результативна, если это имеет значение.
Ответ 2
Ранее я делал это, создавая функцию шаблона:
func texArg(s interface{}) string {
return fmt.Sprintf("{%v}", s)
}
который я зарегистрировал как arg
, используя template.Funcs. Затем в моем шаблоне я:
\textbf{{.Name | arg}}
Я думаю, что ответ @zzzz выше лучше, поскольку это разваливается, когда вам нужно его вложить, но я подумал, что оставлю это здесь для альтернативного подхода.
Ответ 3
мое решение adhok было:
\barcode{{print "{" .Barcode}}}
Ответ 4
Лучшим решением является просто использовать встроенные операторы пробелов, например:
\setkomavar{signature}{ {{- .Name -}} }
-
в начале и конце удалит пробелы между этим токеном и следующим несимметричным токеном.
Надеюсь, что это поможет, см. документы для более подробной информации