首页 > 后端开发 > Golang > 如何在 Go 中实现 JavaScript 的 eval() 功能?

如何在 Go 中实现 JavaScript 的 eval() 功能?

Susan Sarandon
发布: 2024-11-10 20:06:03
原创
745 人浏览过

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

Go 中等效的 JS eval()

Go 中确实可以执行类似于 JavaScript 的 eval() 的计算。这对于在程序中执行表达式特别有用。考虑以下 JavaScript 代码:

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;
登录后复制

res 的结果将是:

200
4
27
登录后复制
登录后复制

Go 中的实现

在 Go 中, go/types 包提供了等效的功能。以下是在 Go 中实现相同功能的方法:

您需要使用 types.NewPackage 和 types.Scope 定义自己的包。要定义常量,请使用 types.NewConst,并提供适当的类型信息。

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)
    }
}
登录后复制

通过运行此 Go 代码,您将获得与 JavaScript 示例中相同的结果:

200
4
27
登录后复制
登录后复制

以上是如何在 Go 中实现 JavaScript 的 eval() 功能?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板