JS eval() Equivalent in Go
Evaluations similar to JavaScript's eval() can indeed be performed in Go. This is especially useful for executing expressions within the program. Consider the following JavaScript code:
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;
The result of res will be:
200 4 27
Implementation in Go
In Go, the equivalent functionality is provided by the go/types package. Here's how you can achieve the same in Go:
You'll need to define your own package using types.NewPackage and types.Scope. To define constants, use types.NewConst, providing the appropriate type information.
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) } }
By running this Go code, you'll obtain the same results as in the JavaScript example:
200 4 27
The above is the detailed content of How to Achieve the Functionality of JavaScript's `eval()` in Go?. For more information, please follow other related articles on the PHP Chinese website!