像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中文網其他相關文章!