像 JavaScript 的 Eval() 一样执行 Go 代码/表达式
在 JavaScript 中,eval() 方法允许您基于字符串输入。 Go 中是否有类似的功能?
解决方案
是的,使用以下方法可以使用 Go 实现类似的功能:
使用包、范围和常量:
用法示例:
以下代码片段演示了如何在 Go 中计算简单表达式:
import ( "fmt" "go/types" ) func main() { // Create a new package pkg := types.NewPackage("mypkg", "github.com/example/mypkg") // Create a new scope scope := types.NewScope(pkg, nil) // Insert constants into the scope scope.Insert(types.NewConst("x", types.Int, types.NewInt64(10))) scope.Insert(types.NewConst("y", types.Int, types.NewInt64(20))) // Evaluate simple expressions expr1 := "x * y" expr2 := "2 + 2" expr3 := "x + 17" result1, _ := evaluate(pkg, scope, expr1) result2, _ := evaluate(pkg, scope, expr2) result3, _ := evaluate(pkg, scope, expr3) // Print the results fmt.Println(result1, result2, result3) } // evaluate takes a package, scope, and expression and evaluates the expression in the provided scope. func evaluate(pkg *types.Package, scope *types.Scope, expr string) (types.Object, error) { // Check the expression if expr == "" { return nil, fmt.Errorf("empty expression") } // Parse the expression parsed, err := types.ParseExpr(expr) if err != nil { return nil, err } // Evaluate the expression return pkg.Check(parsed.Pos(), parsed), nil }
此代码将计算自定义包的范围,允许您根据输入字符串动态评估代码。
以上是如何像JavaScript的eval()一样动态执行Go代码?的详细内容。更多信息请关注PHP中文网其他相关文章!