gpt4 book ai didi

使用 go 动态创建编译后的二进制文件

转载 作者:IT王子 更新时间:2023-10-29 00:40:30 25 4
gpt4 key购买 nike

首先,对于一个糟糕的标题感到抱歉 - 我想我遇到的很多困难都与不知道我想要实现的目标的正确术语有关。

在 Go 中,我希望有一个程序在运行时可以动态创建一个辅助二进制文件。用一个基本的 hello world 示例来说明 - 在伪代码中,因为我不知道如何实现它。

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 时,都会创建一个 subprogram 二进制文件。运行它会输出 Hello World。将 statement.txt 更改为其他内容并再次执行 go run generator.go 将再次创建 subprogram ,它在运行时将执行新语句。

总结

使用 Go,我如何创建一个可以动态创建已编译子程序作为输出的程序。

谢谢。

最佳答案

所以你有 2 个子任务,它们一起做你想做的事:

  1. 执行文本替换以获取最终源代码。
  2. 将最终的源代码编译成可执行的二进制文件。

1。文本替换

第一个可以使用 text/template 轻松完成包裹。您可以将源代码模板作为单独的单独文件,或嵌入到主要 Go 源代码中(例如作为 consts)。

您可以构建/解析源代码模板并获得 Template与例如template.ParseFiles()或使用 template.New().Parse()。获得模板后,组装(例如从文件加载)要包含在源模板中的值并执行它,例如与 Template.Execute() .您现在拥有最终来源。

text/template 包为您提供了一个强大的模板引擎,其功能远不止文本替换。

注意:go 的子包中,标准库中还实现并提供了一个 Go 解析器供您使用。 , 但使用 text/template 包要简单得多,而且看起来对你的情况来说已经足够完美了。

2。编译

要将最终的源码编译成可执行的二进制文件,需要编译器的帮助。您可以使用 os/exec包以调用将生成二进制文件的编译器。查看exec.Command()获取 Cmd 的函数, 和 Cmd.Run()Cmd.Start()执行它。

关于使用 go 动态创建编译后的二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30258900/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com