如何让golang执行一个字符串

时间:2015-02-28 15:51:36

标签: go

我不是要让golang做某种" eval"在当前上下文中,只需要它获取输入字符串(例如,从网络接收)并将其作为单独的golang程序执行。

理论上,当您运行go run testme.go时,它会将testme.go的内容读入字符串并解析,编译并执行它。不知道是否可以调用go函数直接执行字符串。请注意,我要求不将字符串写入文件。

UPDATE1

我真的想知道是否有一个函数(在一些go包中)作为go的入口点,换句话说,我可以用字符串作为参数来调用这个函数,它的行为就像{{ 1}},其中testme.go包含该字符串的内容。

2 个答案:

答案 0 :(得分:4)

AFAIK无法完成,并且go编译器必须编写中间文件,因此即使您使用go run而不是go build,也会为了运行代码而创建文件,它们是如有必要,请尽快清理干净因此,即使您设法使编译器不是从文件中获取源代码,也无法在不触及磁盘的情况下运行go程序。

例如,在简单的hello world程序上调用strace时运行go run,除其他外,显示以下几行:

mkdir("/tmp/go-build167589894", 0700) 
// ....
mkdir("/tmp/go-build167589894/command-line-arguments/_obj/exe/", 0777) 
// ... and at the end of things
unlink("/tmp/go-build167589894/command-line-arguments/_obj/exe/foo") 
// ^^^ my program was called foo.go
// ....
// and eventually:
rmdir("/tmp/go-build167589894")

所以你可以看到go run在幕后写了很多磁盘,之后就清理了。

我想如果你愿意的话,你可以安装一些tmpf并构建它,但除此之外我不相信它是可能的。

答案 1 :(得分:2)

我知道这个问题已有5年之久,但我想说的是,实际上,对于任何寻求最新答案的人来说,现在都有可能。

Golang编译器本身是用Go编写的,因此理论上可以嵌入Go程序中。但是,这将非常复杂。

作为更好的选择,有yaegi之类的项目实际上是可以嵌入Go程序的Go解释器。