go - 如何让golang执行一个字符串

标签 go

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

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

更新1

我真的很想知道是否有一个函数(在一些 go 包中)作为 go 的入口点,换句话说,我可以用一个字符串作为参数调用这个函数,它的行为就像 go run 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 在幕后做了很多磁盘写入,只是事后清理。

我想如果您愿意,您可以挂载一些 tmpfs 并在其中构建,但除此之外我认为这是不可能的。

关于go - 如何让golang执行一个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28783637/

相关文章:

java - Go、Java 和 C# 中数组的最大长度是多少?

c++ - 如何从 C++ DLL 回调 GO 方法

php - 使用 Go 解密使用 MCRYPT_RIJNDAEL_256 在 php 中加密的字符串

go - runtime.LockOSThread 是否允许子 goroutine 在同一个操作系统线程中运行?

go - 为什么要将 Golang 接口(interface)命名为 "Interface"?

logging - Go - 包装记录器以便在请求的每条消息中添加特定信息

go - 如何限制与 Go API 的并发连接

go - 作为发布者连接到 RabbitMQ 的频率

go - 从返回元组的 func 初始化结构

如果表中存在许可 key ,则 MySQL 代码将用户名和密码插入表中