共计 837 个字符,预计需要花费 3 分钟才能阅读完成。
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 main
import (
"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…
正文完