Go 中等效的 JS eval()
Go 中确实可以执行类似于 JavaScript 的 eval() 的计算。这对于在程序中执行表达式特别有用。考虑以下 JavaScript 代码:
var x = 10; var y = 20; var a = eval("x * y") + "<br>"; var b = eval("2 + 2") + "<br>"; var c = eval("x + 17") + "<br>"; var res = a + b + c;
res 的结果将是:
200 4 27
Go 中的实现
在 Go 中, go/types 包提供了等效的功能。以下是在 Go 中实现相同功能的方法:
您需要使用 types.NewPackage 和 types.Scope 定义自己的包。要定义常量,请使用 types.NewConst,并提供适当的类型信息。
package main import ( "fmt" "go/types" ) func main() { // Create a new package and scope. pkg := types.NewPackage("example", "example.com/eval") scope := types.NewScope(pkg, types.RelativeToPkg, "") // Insert constants into the package's scope. x := types.NewConst(scope, "x", types.Int, types.NewInt64(10)) y := types.NewConst(scope, "y", types.Int, types.NewInt64(20)) // Define the expressions to be evaluated. exprA := "x * y" exprB := "2 + 2" exprC := "x + 17" // Evaluate the expressions. results := []int64{} for _, expr := range []string{exprA, exprB, exprC} { result, err := types.Eval(expr, scope) if err != nil { panic(err) } results = append(results, result.Int64()) } // Print the results. fmt.Println("Results:") for _, result := range results { fmt.Println(result) } }
通过运行此 Go 代码,您将获得与 JavaScript 示例中相同的结果:
200 4 27
以上是如何在 Go 中实现 JavaScript 的 eval() 功能?的详细内容。更多信息请关注PHP中文网其他相关文章!