我的问题是:

  1. 我的机器上有一个围棋二进制程序
  2. 我需要从该二进制文件编译一个外部.go文件
  3. 编译后,我需要将编译后的go文件链接到当前二进制文件中,以便使用刚刚编译的go代码.

你觉得有可能吗?

我做了一些研究,但这似乎是不可能的,但我可能忽略了一些东西.

谢谢:)

第一个GO二进制文件将包含如下内容

func main() {
    // Here I need to compile an external go file (or package) which contains
    // The definition of runFoo()

    // Once the file/package is compiled and linked I need to call the compiled code
    runFoo()

    // Continue the execution process normally here
}

推荐答案

Update:现在可以在主线Go中执行此操作,参见Go Execution Modes

Go 1.5 release notes:

仅对于amd64体系 struct ,编译器有一个新选项,

Old Answer (useful discussion of other options):

目前无法在主线Go中创建动态链接库*.有人谈论过这一点,所以你可能会在future 看到支持.然而,有一个名为goandroid的第三方go项目需要与您相同的功能,因此他们维护的补丁应该允许您修补官方go代码库,以支持您请求的动态链接支持.

如果您想使用标准的Go运行时,我建议您使用以下方法之一. 从您的其他程序调用Go程序,并使用以下方式进行通信:

  1. 要通信的管道
  2. UNIX域套接字
  3. An mmaped region of shared memory.
    1. 也就是说,在/dev/shm上创建一个文件,并让两个程序对其进行mmap.
    2. Go mmap库:https://github.com/edsrzf/mmap-go

每一个连续的选项都需要花费更多的精力来设置,更具体的平台,但可能比前一个更强大.

*Note:,即Windows环境中的DLL和UNIX/Linux环境中的.so文件.

Go相关问答推荐

如何在AWS SDK Go v2 STS上正确使用重试

为什么工具链指令在这种情况下没有效果?

需要类型[]*structpb.Value(GCP Golang客户端库;aiPlatform)

如何使用工作区方法扩展克隆的Golang库

如何用Golang解码这个嵌套的json?

Golang内置打印(Ln)函数&S行为怪异

如何执行asn 1 marshal/unmarshal和omit字段?

如何模拟go的Elastic search SDK?

从 wincrypt API 到 Go 的 RC2 解密

使用 goroutine 比较 Golang 中的两棵树是等价的

在golang二进制中嵌入SvelteKit

读取非UTF8编码的文件内容并正确打印出来

为什么此代码在运行命令 error="exec: not started" 时出现错误?

级联调用泛型函数时的泛型类型推断

此代码如何生成内存对齐切片?

我如何解码 aes-256-cfb

同时调用应该只获取一次数据

GOLANG 如何使用 http.FileServer 从模板目录加载某个 html 文件

从 map 返回空数组而不是空字符串数组

我应该明确地创建一个与Belongs To或Has Many对称的关系吗?