我正在寻找一种有效的方法来替换用户提供的文本文件中的一堆占位符/令牌,并将它们的相应值存储在简单的地图或环境变量中。问题是模板文件将由最终用户提供,所以我正在寻找一种“安全”的方法来只进行变量替换,而不会有任何代码执行风险等。
Go 的标准“文本/模板”将适用于替换本身,但会施加特定的格式要求(例如,键之前的点“.”)并通过其函数调用、管道等打开其他可能性。
因此,理想情况下,我正在寻找的是一个可以解析具有可配置分隔符(“{{}}”或“${}”或“$##$”)的文本文件并将所有检测到的标记替换为的函数查找提供的地图或其 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