在 go 应用程序中传递要评估的表达式?
Passing expressions to be evaluated within a go application?
我有一个 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 中处理这个问题的最简单和最标准的方法是什么 language/evaluator?
(我可以看到我们有 go-v8
和 golua
之类的东西,但是我不确定这是否是正确的思考方式?)
注意:这是个人脚本,安全问题不在范围内。
也许您可以使用 text.template
包来评估您的输入。
然后将其输出解析为输入表达式的结果。
这是一些 Go 构建工具所做的。例如 docker inspect
使用它来格式化它的输出。
我有一个 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 中处理这个问题的最简单和最标准的方法是什么 language/evaluator?
(我可以看到我们有 go-v8
和 golua
之类的东西,但是我不确定这是否是正确的思考方式?)
注意:这是个人脚本,安全问题不在范围内。
也许您可以使用 text.template
包来评估您的输入。
然后将其输出解析为输入表达式的结果。
这是一些 Go 构建工具所做的。例如 docker inspect
使用它来格式化它的输出。