ホームページ  >  記事  >  バックエンド開発  >  動的コード評価用の JavaScript の eval() 関数に相当する Go はありますか?

動的コード評価用の JavaScript の eval() 関数に相当する Go はありますか?

DDD
DDDオリジナル
2024-11-13 03:30:02733ブラウズ

Is there a Go equivalent to JavaScript's eval() function for dynamic code evaluation?

JavaScript の eval() のような Golang コード/式の評価/実行

JavaScript の eval() メソッドを使用すると、コードの評価と実行が可能になります。ダイナミックに表現します。これにより、同様の機能が Go に存在するかどうかという疑問が生じます。

解決策

はい、次を使用して Go コード/式、特に式を評価して実行することができます。 Go 標準ライブラリの eval.go パッケージ。

これを実現するには、次のワークフローが必要です:

  1. パッケージを作成します: これはコードを表します。式が評価されるコンテキスト。
  2. スコープの作成: これは、パッケージ内の変数スコープを表します。
  3. 定数の挿入: 挿入式で使用される変数を定数としてパッケージのスコープに追加します。
  4. 式の評価: eval.go パッケージの Eval 関数を使用して、式を評価します。

提供されている 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;

次の Go コードは、これらの式を評価する方法を示しています:

import (
    "fmt"
    "go/types"
)

func main() {
    // Create a package
    pkg := types.NewPackage("main", "go.example.org/eval")

    // Create a scope
    scope := types.NewScope(pkg, types.Universe)

    // Insert constants
    scope.Insert(types.NewConst(types.NewVar(scope, "x", types.Int), types.Typ[types.Int], 10))
    scope.Insert(types.NewConst(types.NewVar(scope, "y", types.Int), types.Typ[types.Int], 20))

    // Evaluate expressions
    res := evalExpression(scope, pkg)
    fmt.Println(res) // 200\n4\n27
}

func evalExpression(scope *types.Scope, pkg *types.Package) string {
    expr, _ := types.ParseExpr("x * y + \"\n\"")
    result, _ := eval.Eval(expr, pkg, scope)
    return result.String()
}

以上が動的コード評価用の JavaScript の eval() 関数に相当する Go はありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。