Go Eval 库
Golang
的 eval()
函数第三方实现。
背景
家喻户晓,Golang
是一门动态语言,笔者作为动静语言转过来的老同志(别猜了我是phper),习惯了用 eval()
就想着Go 动静执行代码呢。
如何在 golang
中应用 eval()
函数,php
,javascript
自带该性能。golang 官网是没有提供相干库的。
在丰盛的Go第三方生态中,着实没找到相干的库。倒是看到有人做了一个demo 挂到博客。我就来拿来改改,做成了一个库,望宽广 gopher
用的称心。
装置
$ go get github.com/PaulXu-cn/goeval
性能介绍
这个 goeval 库,传入 golang
代码字符串,而后执行 eval()
函数,就能取得该 字符串代码
输入到 stdout
上的内容。
应用例子:
package mainimport ( "fmt" eval "github.com/PaulXu-cn/goeval")func main() { if re, err := eval.Eval("", "fmt.Print(\"Hello World itjsz.com\")", "fmt"); nil == err { fmt.Print(string(re)) } else { fmt.Print(err.Error()) }}
输入:
Hello World itjsz.com
这里咱们引入了 goeval
包,调用它的 Eval 函数,第一个参数是,构造体定义代码(因为代码中没有有用自定义构造体,所有这里传空), 第二个字符串是要执行的代码,第三及当前的字符串是import的包。
实现细则
- 依照传入的字符串构建整个运行代码的字符串
- 格式化代码,次要是删除未应用 包,所以
import
的包能够多,但不能少。 - 在
tmp
目录下随机创立一个目录,并进入 - 在刚创立目录里创立
main.go
文件 - 写入格式化后的代码
- 运行
go run main.go
并收集stdout
- 删除创立的文件夹以及
main.go
- 返回 stdout
参考
- https://golangtc.com/t/55b4ef...