关于golang:Go也能Eval了

14次阅读

共计 837 个字符,预计需要花费 3 分钟才能阅读完成。

Go Eval 库

Golangeval() 函数第三方实现。

背景

家喻户晓,Golang 是一门动态语言,笔者作为动静语言转过来的老同志(别猜了我是 phper),习惯了用 eval() 就想着 Go 动静执行代码呢。

如何在 golang 中应用 eval() 函数,phpjavascript 自带该性能。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 的包。

实现细则

  1. 依照传入的字符串构建整个运行代码的字符串
  2. 格式化代码,次要是删除未应用 包,所以 import 的包能够多,但不能少。
  3. tmp 目录下随机创立一个目录,并进入
  4. 在刚创立目录里创立 main.go 文件
  5. 写入格式化后的代码
  6. 运行 go run main.go 并收集 stdout
  7. 删除创立的文件夹以及 main.go
  8. 返回 stdout

参考

  • https://golangtc.com/t/55b4ef…
正文完
 0