2016-08-30 3 views
2

私はオブジェクト(構造体)のリストをスキャンする検索機能を持つgoコマンドラインアプリケーションを持っています。私は多分、私が行うことができます検索機能を呼び出し、すなわちだけではなくgoアプリケーションで評価される式を渡す?

mycmd search bob 

のことができるようにしたい:

mycmd search 'o.Name() == "bob"' 
mycmd search 'len(o.PhoneNumbers()) > 1' 
mycmd search 'strings.Index(o.Name(), "bob") >= 0' 

があなたのgoにループ内で、このような表現を処理することが可能ですコード?これが不可能な場合は、私自身の表現言語/評価者を作成せずに、GOでこれにアプローチする最も簡単で最も標準的な方法は何ですか?

(私はこれはそれについて考えるための正しい方法であればしかし、私はわからないんだけど、私たちはgo-v8goluaのようなものを持って見ることができますか?)

注:その個人的なスクリプト、セキュリティ上の懸念がされています範囲外。

答えて

1

おそらく入力の評価にtext.templateパッケージを使用することができます。
そして、入力された式の結果について、その出力を解析します。

これはいくつかのGoビルドツールの機能です。たとえば、docker inspectは、出力の書式設定にこれを使用します。

+0

うん...これはちょうどうまくいくかもしれません。私はいくつかの考えが必要です。 – Jacob

+0

これは、必要な表現がやや単純な場合の優れた解決策だと思います。これはいくつかの問題の答えかもしれません。しかし、テンプレート言語は単純な比較文以上のものをサポートしていません。 (文字列の操作などはできません) – Jacob

+0

@Jacobより複雑なものについては、カスタム関数をテンプレートコンテキストに挿入することができます。 – TheHippo