JavaScript の Eval() のような Go コード/式の実行
JavaScript では、eval() メソッドを使用すると、以下に基づいてコードを動的に実行できます。文字列入力。 Go で利用できる同様の機能はありますか?
解決策
はい、次のアプローチを使用して Go で同様の機能を実現できます:
パッケージ、スコープ、定数の使用:
使用例:
これは、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 }
このコードは、カスタム パッケージのスコープを設定し、入力文字列に基づいてコードを動的に評価できるようにします。
以上がJavaScript の eval() のように Go コードを動的に実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。