Maison > développement back-end > Golang > Existe-t-il un équivalent Go à la fonction eval() de JavaScript pour l'évaluation dynamique du code ?

Existe-t-il un équivalent Go à la fonction eval() de JavaScript pour l'évaluation dynamique du code ?

DDD
Libérer: 2024-11-13 03:30:02
original
818 Les gens l'ont consulté

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

Évalué/exécutant du code/expression Golang comme eval() de JavaScript

La méthode eval() de JavaScript permet l'évaluation et l'exécution de code/ expressions de manière dynamique. Cela soulève la question de savoir si une fonctionnalité similaire existe dans Go.

Solution

Oui, il est possible d'évaluer et d'exécuter du code/des expressions Go, en particulier des expressions, en utilisant le package eval.go de la bibliothèque standard Go.

Pour y parvenir, le workflow suivant est requis :

  1. Créer un package : Cela représente le code contexte dans lequel les expressions seront évaluées.
  2. Créer une portée : Cela représente la portée de la variable dans le package.
  3. Insérer des constantes : Insérer les variables utilisées dans les expressions comme constantes dans la portée du package.
  4. Évaluer les expressions : Utilisez la fonction Eval du package eval.go pour évaluer les expressions.

Exemple

Considérez le code JavaScript fourni :

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;
Copier après la connexion

Le code Go suivant montre comment évaluer ces expressions :

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()
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal