如何强制golang将文件链接到我的二进制文件?

时间:2015-07-29 21:02:53

标签: go

我想创建一个模块库,可以添加文件并将其作为二进制文件的一部分。

例如,在我的package main我有:

type InitFunc func(params DriverParams) (Driver, error)

func Register(name string, f InitFunc) {
}

然后我希望有人在模块目录中添加一个调用Register()

的文件

随后我的主程序包将调用所有已注册的功能。

这样,我的主程序包就不会知道将要添加的模块。

如何在golang中完成此操作?

1 个答案:

答案 0 :(得分:4)

简而言之 - 你做不到。 Go静态链接所有内容并进行一些优化,因此如果您没有从main显式引用它,则您安装的模块甚至可能无法编译。这种限制会让人受苦,他们会this - 插件只是正常的Go应用程序通过RPC与主应用程序进行通信。

这可能听起来很奇怪(当你的应用程序的一部分通过TCP堆栈与另一部分对话时),但如果你想一点,那么它实际上让你非常有信心插件不会对应用程序产生任何伤害。例如,当插件崩溃时,应用程序的其余部分很可能会存活。