Go-Code/Ausdrücke wie JavaScripts Eval() ausführen
In JavaScript können Sie mit der eval()-Methode Code basierend auf dynamisch ausführen eine String-Eingabe. Gibt es eine ähnliche Funktionalität in Go?
Lösung
Ja, es ist möglich, mit Go eine ähnliche Funktionalität zu erreichen, indem man den folgenden Ansatz verwendet:
Verwenden von Paketen, Bereichen usw Konstanten:
Beispielverwendung:
Hier ist ein Codeausschnitt, der zeigt, wie man einfach auswertet Ausdrücke 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 }
Dieser Code wertet die bereitgestellten Ausdrücke im Rahmen des benutzerdefinierten Pakets aus, sodass Sie Code basierend auf Eingabezeichenfolgen dynamisch auswerten können.
Das obige ist der detaillierte Inhalt vonWie kann ich Go-Code wie eval() von JavaScript dynamisch ausführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!