Executing Go Code/Expressions Like JavaScript's Eval()
In JavaScript, the eval() method allows you to execute code dynamically based on a string input. Is there a similar functionality available in Go?
Solution
Yes, it is possible to achieve similar functionality with Go using the following approach:
Using Packages, Scopes, and Constants:
Example Usage:
Here is a code snippet that demonstrates how to evaluate simple expressions in Go:
import ( "fmt" "go/types" ) func main() { // Create a new package pkg := types.NewPackage("mypkg", "github.com/example/mypkg") // Create a new scope scope := types.NewScope(pkg, nil) // Insert constants into the scope scope.Insert(types.NewConst("x", types.Int, types.NewInt64(10))) scope.Insert(types.NewConst("y", types.Int, types.NewInt64(20))) // Evaluate simple expressions expr1 := "x * y" expr2 := "2 + 2" expr3 := "x + 17" result1, _ := evaluate(pkg, scope, expr1) result2, _ := evaluate(pkg, scope, expr2) result3, _ := evaluate(pkg, scope, expr3) // Print the results fmt.Println(result1, result2, result3) } // evaluate takes a package, scope, and expression and evaluates the expression in the provided scope. func evaluate(pkg *types.Package, scope *types.Scope, expr string) (types.Object, error) { // Check the expression if expr == "" { return nil, fmt.Errorf("empty expression") } // Parse the expression parsed, err := types.ParseExpr(expr) if err != nil { return nil, err } // Evaluate the expression return pkg.Check(parsed.Pos(), parsed), nil }
This code will evaluate the provided expressions within the scope of the custom package, allowing you to dynamically evaluate code based on input strings.
The above is the detailed content of How Can I Dynamically Execute Go Code Like JavaScript's eval()?. For more information, please follow other related articles on the PHP Chinese website!