【问题标题】:How to run go code dynamically from string?如何从字符串动态运行代码?
【发布时间】:2019-09-04 10:05:29
【问题描述】:

我需要动态执行代码,例如运行fmt.Print("hello")(字符串格式),也许我正在寻找的是一个go虚拟机?

使用 go-playground,我们可以输入代码并执行,后面是如何工作的?

最糟糕的解决方案是将字符串代码写入文件并使用exec.Command("go", "run","file") 调用它。

【问题讨论】:

  • This answer 部分回答了您的问题。
  • 您的“最糟糕的解决方案”正是 Go 游乐场所做的,因为它基本上是唯一 的方法。对于简单的事情,Go 解释器可能适合您的需要(谷歌“golang 解释器”并选择任何一个)。在标准库中没有直接“评估”Go 代码的方法。
  • Go 是一种编译语言,而不是解释语言。没有原生支持将任意字符串作为 Go 代码执行;使用标准 SDK 执行任何 Go 代码都需要将其写入文件,将其编译为二进制文件,然后执行该二进制文件。
  • 嗨@seaguest,你看过github.com/containous/yaegi吗?

标签: go


【解决方案1】:

1。游乐场

使用 go-playground,我们可以输入代码并执行,后面是如何工作的?

我想你大部分都回答了你的 owm 问题。

很快就从操场上找到compileAndRun 的来源。

最糟糕的解决方案是将字符串代码写入文件并使用 exec.Command("go", "run","file") 调用它。

是的,它使用: https://github.com/golang/playground/blob/509e10fc018f6da63e433d45afbf5c21af9480a2/sandbox.go#L361

    cmd := exec.Command("go", "build", "-o", exe, buildPkgArg)

2。 Jupyter 内核、gore、lgo、gophernotes 和 gomacro

虽然不代表一定要一直这样。

我自己打算在业余时间研究:

  • gophernotes
  • lgo
  • gomacro,它本身就是用于 gophernotes 的包

总体而言:它不像其他语言中的eval 那样容易,但没有什么可以停止实现它。

祝你好运!

【讨论】:

    猜你喜欢
    • 2016-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多