Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何让golang执行字符串_Go - Fatal编程技术网

如何让golang执行字符串

如何让golang执行字符串,go,Go,我不是要让golang在当前上下文中进行某种“评估”,只是需要它获取一个输入字符串(比如,从网络接收)并将其作为一个单独的golang程序执行 理论上,当您运行go-run-testme.go时,它会将testme.go的内容读入一个字符串,并对其进行解析、编译和执行。不知道是否可以调用go函数直接执行字符串。请注意,我要求不要将字符串写入文件 更新1 我真的很想知道是否有一个函数(在某个go包中)作为go的入口点,换句话说,我可以用一个字符串作为参数调用这个函数,它的行为类似于运行testme

我不是要让golang在当前上下文中进行某种“评估”,只是需要它获取一个输入字符串(比如,从网络接收)并将其作为一个单独的golang程序执行

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

更新1


我真的很想知道是否有一个函数(在某个go包中)作为go的入口点,换句话说,我可以用一个字符串作为参数调用这个函数,它的行为类似于运行testme.go,其中testme.go包含该字符串的内容。

如果无法完成,go编译器必须编写中间文件,因此,即使您使用的是
go run
而不是
go build
,文件都是为了运行代码而创建的,必要时也会进行清理。因此,即使您设法使编译器获取源代码而不是从文件中获取源代码,也无法在不接触磁盘的情况下运行go程序

例如,在一个简单的hello-world程序上调用
go-run
时运行
strace
,会显示以下几行内容:

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并在其中进行构建,但我认为这是不可能的。

我知道这个问题已经(5年)了,但我想说的是,事实上,对于任何正在寻找最新答案的人来说,现在是可能的

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


作为更好的替代方案,有一些项目可以有效地作为围棋解释器嵌入围棋程序。

感谢@Not_a_Golfer使用strace的想法。听起来唯一的可能是创建ramdisk,所以go将在ramdisk中写入中间文件。不知道是否有它的软件包。@codingFun在最新的linux发行版上,/tmp是一个ramdisk(tmpfs)。@OneOfOne:这远非普遍正确。不过,大多数都有一块映射到
/run/shm
/dev/shm
的共享内存。@JimB很高兴知道,我个人在使用arch,并尝试了其他1或2个这样的方法。谢谢大家的意见。我已经用update1澄清了这个问题。不写中间文件的要求从何而来?