golang 有没有eval
A: Go语言本身没有提供类似于eval函数的功能。但是可以使用Go语言自带的go/ast包和go/parser包来解析代码字符串并生成抽象语法树(AST),然后使用go/types包对生成的AST进行类型检查和求值。以下是一个简单的例子:
```go
package main
import (
"fmt"
"go/ast"
"go/parser"
"go/token"
"go/types"
)
func main() {
expr := "1 + 2 * 3"
fset := token.NewFileSet()
node, err := parser.ParseExpr(expr)
if err != nil {
panic(err)
}
info := types.Info{
Types: make(map[ast.Expr]types.TypeAndValue),
Definitions: make(map[*ast.Ident]types.Object),
Uses: make(map[*ast.Ident]types.Object),
}
types.Check(expr, fset, []*ast.File{ast.NewFile(fset, token.NoPos, &ast.File{Name: ast.NewIdent("main")}, []*ast.Decl{&ast.ExprStmt{X: node}})}, &info)
val := info.Types[node].Value.String()
fmt.Println(val)
}
```
该示例将解析字符串"1 + 2 * 3"并计算其值。在实际场景中,使用eval功能可能会存在安全隐患,因此应谨慎使用。