1

ユーザー提供のテキスト ファイル内の一連のプレースホルダー/トークンを、単純なマップまたは環境変数に格納されている対応する値に置き換える効率的な方法を探しています。問題は、テンプレート ファイルがエンド ユーザーによって提供されることです。そのため、コード実行などのリスクなしに、変数の置換のみを行う「安全な」方法を探しています。

Go の標準の「テキスト/テン​​プレート」は、置換自体には機能しますが、特定のフォーマット要件 (たとえば、キーの前のドット「.」) を課し、その関数呼び出し、パイプラインなどで他の可能性を開きます。

したがって、私が探しているのは、理想的には、テキスト ファイルを構成可能な区切り記号 ("{{}}" または "${}" または "$##$") で解析し、検出されたすべてのトークンを提供されたマップまたはその環境変数値へのルックアップ。Python のstring.Template( https://docs.python.org/2.6/library/string.html?highlight=string.template#string.Template ) と同様です。

このためにテキスト/テン​​プレート ライブラリを構成または再利用する簡単な方法はありますか? ユースケースにより適した他のアプローチはありますか? golang 以外のオプション ( 、スクリプトなど) も調べたenvsubtrのでawksed何かがより適している場合は、自由に Go の外に出てください。

サンプル入力ファイル ('template.properties'):

var1=$#VAR_1#$
var2=$#VAR_2#$

サンプル入力データ:

VAR_1 = apples
VAR_2 = oranges

処理後に期待される出力:

var1=apples
var2=oranges
4

2 に答える 2

0

fasttemplate[1] を使用するだけです。それはあなたの要件に完全に適合します:

  • 任意のプレースホルダーの開始および終了区切り文字を使用できます。
  • プレースホルダーの置換以外のロジックがないため、信頼できない入力のリスクはありません。
  • テキスト/テン​​プレートよりもはるかに高速に動作します (10 倍)。

[1] https://github.com/valyala/fasttemplate

于 2015-08-23T12:50:53.027 に答える