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
Libérer: 2024-11-10 20:06:03
original
727 Les gens l'ont consulté

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

Le résultat de res sera :

200
4
27
Copier après la connexion
Copier après la connexion

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

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

200
4
27
Copier après la connexion
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!

source:php.cn
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal