在 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-v8golua 之类的东西,但是我不确定这是否是正确的思考方式?)

注意:这是个人脚本,安全问题不在范围内。

也许您可以使用 text.template 包来评估您的输入。
然后将其输出解析为输入表达式的结果。

这是一些 Go 构建工具所做的。例如 docker inspect 使用它来格式化它的输出。