Home >Backend Development >Golang >How to Achieve the Functionality of JavaScript's `eval()` in Go?

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

Susan Sarandon
Susan SarandonOriginal
2024-11-10 20:06:03765browse

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

JS eval() Equivalent in Go

Evaluations similar to JavaScript's eval() can indeed be performed in Go. This is especially useful for executing expressions within the program. Consider the following JavaScript code:

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;

The result of res will be:

200
4
27

Implementation in Go

In Go, the equivalent functionality is provided by the go/types package. Here's how you can achieve the same in Go:

You'll need to define your own package using types.NewPackage and types.Scope. To define constants, use types.NewConst, providing the appropriate type information.

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

By running this Go code, you'll obtain the same results as in the JavaScript example:

200
4
27

The above is the detailed content of How to Achieve the Functionality of JavaScript's `eval()` in Go?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn