Как выполнить шаблон 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 -}} }

- в начале и конце удалит пробелы между этим токеном и следующим несимметричным токеном.

Надеюсь, что это поможет, см. документы для более подробной информации