在Go中评估公式

jlh*_*ora 8 go

使用Go(golang)我想带一个带有公式的字符串并使用预定义的值进行评估.这是使用python parser模块的方法:

x = 8
code = parser.expr("(x + 2) / 10").compile()
print eval(code)
# prints 1
Run Code Online (Sandbox Code Playgroud)

知道如何用Go做到这一点?

nem*_*emo 10

您可能需要求助于解释数学语句的库或者必须编写自己的解析器.Python是一种动态语言,可以在运行时解析和执行python代码.标准围棋不能那样做.

如果你想自己编写一个解析器,go包将会有所帮助.示例(正在播放):

import (
    "go/ast"
    "go/parser"
    "go/token"
)

func main() {
    fs := token.NewFileSet()
    tr, _ := parser.ParseExpr("(3-1) * 5")
    ast.Print(fs, tr)
}
Run Code Online (Sandbox Code Playgroud)

然后可以根据您的选择遍历和解释生成的AST(抽象语法树)(例如,处理'+'标记作为现在存储的值的加法).


swi*_*ill 5

该软件包可能会满足您的需求:https : //github.com/Knetic/govaluate

expression, err := govaluate.NewEvaluableExpression("(x + 2) / 10");

parameters := make(map[string]interface{}, 8)
parameters["x"] = 8;

result, err := expression.Evaluate(parameters);
Run Code Online (Sandbox Code Playgroud)