Maison  >  Article  >  développement back-end  >  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
DDDoriginal
2024-11-13 03:30:02693parcourir

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;

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

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:
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