Я ищу эффективный способ заменить кучу заполнителей/токенов в текстовом файле, предоставленном пользователем, с их соответствующими значениями, хранящимися в простой карте или окружении vars. Дело в том, что файл шаблона будет предоставлен конечным пользователем, поэтому я ищу «безопасный» способ делать только замену переменных без риска выполнения кода и т. Д.Только замена переменных шаблона. Является ли текст/шаблон подходящим?
Стандартный стандарт Go/template "будет работать для самой замены, но накладывает особые требования к форматированию (например, точка". "перед ключом) и открывает другие возможности с помощью своих функций, вызовов, трубопроводов и т. д.
Так что я ищу, в идеале, это функция, которая может анализировать текстовый файл с настраиваемыми разделителями («{{}}» или «$ {}» или «$ ## $») и заменять все обнаруженные маркеры поисками в прилагаемую карту или их env var. Аналогично тому, что делает Python string.Template
(https://docs.python.org/2.6/library/string.html?highlight=string.template#string.Template).
Есть ли простой способ настройки или повторного использования библиотеки текста/шаблона для этого? Существуют ли какие-либо другие подходы, которые лучше подходят для использования? Я также изучил варианты не-golang (например, envsubtr
, awk
и sed
скрипты и т. Д.), Поэтому не стесняйтесь идти за пределы Go, если что-то подходит лучше.
вход Пример файла ('template.properties'):
var1=$#VAR_1#$
var2=$#VAR_2#$
Пример входных данных:
VAR_1 = apples
VAR_2 = oranges
Ожидаемый результат после обработки:
var1=apples
var2=oranges
Вы можете вручную прочитать файл и выполнить последовательные замены операции для переменных/замены, и вы можете сделать это эффективно, создавая выход на лету. Это можно сделать с довольно небольшим количеством строк кода (~ 30). См. Этот вопрос + ответ, который показывает это в Java: [Альтернатива последовательному String.replace] (http://stackoverflow.com/questions/26735276/alternative-to-successive-string-replace) – icza
Спасибо icza. Реализация моего собственного заменителя определенно является вариантом, но я надеялся найти эффективную и гибкую библиотеку, которая может это сделать. Замена жетонов в строке кажется достаточно общей задачей, которую кто-то еще успел бы решить. – Ike
Что-нибудь вроде [Усы] (https://mustache.github.io/) работает на вас? – n0741337