Heim > Backend-Entwicklung > Golang > 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
Freigeben: 2024-11-13 03:30:02
Original
798 Leute haben es durchsucht

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;
Nach dem Login kopieren

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()
}
Nach dem Login kopieren

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!

Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage