Wie kann ich Go-Code wie eval() von JavaScript dynamisch ausführen?

Mary-Kate Olsen
Freigeben: 2024-11-08 03:41:01
Original
933 Leute haben es durchsucht

How Can I Dynamically Execute Go Code Like JavaScript's eval()?

Go-Code/Ausdrücke wie JavaScripts Eval() ausführen

In JavaScript können Sie mit der eval()-Methode Code basierend auf dynamisch ausführen eine String-Eingabe. Gibt es eine ähnliche Funktionalität in Go?

Lösung

Ja, es ist möglich, mit Go eine ähnliche Funktionalität zu erreichen, indem man den folgenden Ansatz verwendet:

Verwenden von Paketen, Bereichen usw Konstanten:

  1. Paket erstellen: Definieren Sie ein benutzerdefiniertes Paket in Ihrem Go-Code.
  2. Bereich erstellen: Erstellen ein Scope-Objekt innerhalb des Pakets, das die Umgebung darstellt, in der der Code ausgewertet wird.
  3. Einfügen Konstanten: Fügen Sie Konstanten in den Gültigkeitsbereich des Pakets ein. Diese Konstanten stellen die zur Auswertung verfügbaren Werte und Variablen dar.
  4. Konstanten erstellen: Verwenden Sie die Funktion „types.NewConst()“, um Konstanten mit den entsprechenden Typinformationen zu erstellen.

Beispielverwendung:

Hier ist ein Codeausschnitt, der zeigt, wie man einfach auswertet Ausdrücke in 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
}
Nach dem Login kopieren

Dieser Code wertet die bereitgestellten Ausdrücke im Rahmen des benutzerdefinierten Pakets aus, sodass Sie Code basierend auf Eingabezeichenfolgen dynamisch auswerten können.

Das obige ist der detaillierte Inhalt vonWie kann ich Go-Code wie eval() von JavaScript dynamisch ausführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage