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

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

点赞
用户45786
用户45786

也许你可以使用 text.template 包来评估你的输入。

然后解析它的输出以获取输入表达式的结果。

这是一些 Go 编译工具所做的事情。例如,docker inspect 使用这个来格式化它的输出。

2016-08-30 03:03:42