Dynamic 使用go动态创建编译的二进制文件
首先,我为一个糟糕的标题感到抱歉——我想我所经历的很多困难都与不知道我想要实现的目标的正确术语有关 在Go中,我希望有一个程序,在运行时可以动态地创建辅助二进制文件。以一个基本的hello world示例为例,使用伪代码,因为我不知道如何实现它Dynamic 使用go动态创建编译的二进制文件,dynamic,go,compilation,dynamically-generated,Dynamic,Go,Compilation,Dynamically Generated,首先,我为一个糟糕的标题感到抱歉——我想我所经历的很多困难都与不知道我想要实现的目标的正确术语有关 在Go中,我希望有一个程序,在运行时可以动态地创建辅助二进制文件。以一个基本的hello world示例为例,使用伪代码,因为我不知道如何实现它 generator.go -> Read in statement from statement.txt (i.e. "Hello World") -> Insert this statement into the following pro
generator.go
-> Read in statement from statement.txt (i.e. "Hello World")
-> Insert this statement into the following program...
package main
import (
"fmt"
)
func main(){
fmt.Println([dynamic statement inserted here])
}
-> compile this code into subprogram
每当执行go run generator.go
时,就会创建一个子程序
二进制文件。运行此命令将输出helloworld
。将statement.txt更改为其他内容,然后再次执行go run generator.go
将再次创建子程序,该子程序在运行时将执行新语句
总之
使用Go,我如何创建一个程序,该程序可以动态地创建一个编译的子程序作为输出
谢谢 所以您有两个子任务,它们一起完成您想要的任务:
执行文本替换以获取最终的源代码
将最终的源代码编译成可执行的二进制文件
1.文本替换
第一步可以使用包轻松完成。您可以将源模板作为单独的文件,或嵌入到主Go源中(例如作为const
s)
您可以构建/解析源代码模板,并使用例如或使用template.New().parse()
获取一个源代码模板。拥有模板后,组装(例如从文件加载)要包含在源模板中的值,并执行(例如使用)。你现在有了最后的消息来源
text/template
软件包为您提供了一个强大的模板引擎,它不仅可以进行文本替换,还可以进行很多操作
注意:标准库中还有一个Go解析器,可以在的子包中使用,但使用文本/模板
包要简单得多,而且看起来对于您的案例来说已经足够了
2.编撰
要将最终源代码编译成可执行二进制文件,需要编译器的帮助。您可以使用包来调用将生成二进制文件的编译器。查看获取并执行的函数。这是使用将解决的问题吗?Gomega中提供了编译步骤的良好实现:自己编写并不复杂,但看到一个好的跨平台示例会很有帮助。