Maison >développement back-end >Golang >Comment obtenir la fonctionnalité de « eval() » de JavaScript dans Go ?

Comment obtenir la fonctionnalité de « eval() » de JavaScript dans Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-10 20:06:03714parcourir

How to Achieve the Functionality of JavaScript's `eval()` in Go?

JS eval() Équivalent en Go

Des évaluations similaires à eval() de JavaScript peuvent en effet être effectuées en Go. Ceci est particulièrement utile pour exécuter des expressions dans le programme. Considérons le code JavaScript suivant :

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 résultat de res sera :

200
4
27

Implémentation dans Go

Dans Go, le une fonctionnalité équivalente est fournie par le package go/types. Voici comment obtenir la même chose dans Go :

Vous devrez définir votre propre package en utilisant types.NewPackage et types.Scope. Pour définir des constantes, utilisez types.NewConst, en fournissant les informations de type appropriées.

package main

import (
    "fmt"
    "go/types"
)

func main() {
    // Create a new package and scope.
    pkg := types.NewPackage("example", "example.com/eval")
    scope := types.NewScope(pkg, types.RelativeToPkg, "")

    // Insert constants into the package's scope.
    x := types.NewConst(scope, "x", types.Int, types.NewInt64(10))
    y := types.NewConst(scope, "y", types.Int, types.NewInt64(20))

    // Define the expressions to be evaluated.
    exprA := "x * y"
    exprB := "2 + 2"
    exprC := "x + 17"

    // Evaluate the expressions.
    results := []int64{}
    for _, expr := range []string{exprA, exprB, exprC} {
        result, err := types.Eval(expr, scope)
        if err != nil {
            panic(err)
        }
        results = append(results, result.Int64())
    }

    // Print the results.
    fmt.Println("Results:")
    for _, result := range results {
        fmt.Println(result)
    }
}

En exécutant ce code Go, vous obtiendrez les mêmes résultats que dans l'exemple JavaScript :

200
4
27

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