Go で同等の JS eval()
JavaScript の eval() と同様の評価は、実際に Go で実行できます。これは、プログラム内で式を実行する場合に特に便利です。次の 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 と tables.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 中国語 Web サイトの他の関連記事を参照してください。