Heim  >  Artikel  >  Backend-Entwicklung  >  Gibt es ein Go-Äquivalent zur eval()-Funktion von JavaScript für die dynamische Codeauswertung?

Gibt es ein Go-Äquivalent zur eval()-Funktion von JavaScript für die dynamische Codeauswertung?

DDD
DDDOriginal
2024-11-13 03:30:02733Durchsuche

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

Ausgewerteter/Ausführen von Golang-Code/Ausdruck wie eval() von JavaScript

Die eval()-Methode von JavaScript ermöglicht die Auswertung und Ausführung von Code/ Ausdrücke dynamisch. Dies wirft die Frage auf, ob eine ähnliche Funktionalität in Go vorhanden ist.

Lösung

Ja, es ist möglich, Go-Code/Ausdrücke, insbesondere Ausdrücke, auszuwerten und auszuführen das eval.go-Paket aus der Go-Standardbibliothek.

Um dies zu erreichen, ist der folgende Workflow Erforderlich:

  1. Erstellen Sie ein Paket: Dies stellt den Codekontext dar, in dem die Ausdrücke ausgewertet werden.
  2. Erstellen Sie einen Bereich: Dies stellt den Variablenbereich innerhalb des Pakets dar.
  3. Konstanten einfügen: Die verwendeten Variablen einfügen in den Ausdrücken als Konstanten in den Gültigkeitsbereich des Pakets.
  4. Ausdrücke auswerten: Verwenden Sie die Eval-Funktion aus dem eval.go-Paket, um die Ausdrücke auszuwerten.

Beispiel

Betrachten Sie den JavaScript-Code vorausgesetzt:

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;

Der folgende Go-Code zeigt, wie diese Ausdrücke ausgewertet werden:

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()
}

Das obige ist der detaillierte Inhalt vonGibt es ein Go-Äquivalent zur eval()-Funktion von JavaScript für die dynamische Codeauswertung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn