Melaksanakan Kod/Ungkapan Go Seperti Eval() JavaScript
Dalam JavaScript, kaedah eval() membolehkan anda melaksanakan kod secara dinamik berdasarkan input rentetan. Adakah terdapat kefungsian serupa yang tersedia dalam Go?
Penyelesaian
Ya, adalah mungkin untuk mencapai kefungsian serupa dengan Go menggunakan pendekatan berikut:
Menggunakan Pakej, Skop dan Pemalar:
Contoh Penggunaan:
Berikut ialah coretan kod yang menunjukkan cara menilai ungkapan mudah dalam 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 }
Kod ini akan menilai ungkapan yang disediakan dalam skop pakej tersuai, membolehkan anda menilai kod secara dinamik berdasarkan rentetan input.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaksanakan Kod Go Secara Dinamik Seperti JavaScript's eval()?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!