在golang中动态加载包

时间:2014-07-08 20:40:34

标签: dynamic go load runtime package

是否可以在运行时加载特定包? 我希望有一种插件,其中每个插件具有与其他插件相同的功能但具有不同的行为,并且根据配置文件,加载一个或其他插件。 谢谢。

5 个答案:

答案 0 :(得分:26)

不,Go不支持动态加载的库。

最好的办法是将插件作为自己的可执行文件启动,并通过套接字或stdin / stdout与它通信。

2017年更新

这个答案不再适用,Go现在支持plugins

答案 1 :(得分:13)

从现在开始支持1.8

https://golang.org/pkg/plugin/

答案 2 :(得分:11)

您可以考虑在运行时执行'plugin'包,方法是写出一个新程序(比如说,到一个临时目录),然后通过exec.Command执行exec.Command("go", "run", files…).Run()

您会看到一些类似的代码here

答案 3 :(得分:0)

只需执行这些操作,创建一个读取配置的codegen,生成一个基本的go文件,然后按顺序加载包,然后执行它,编译语言也不会提供动态加载,甚至dart在某种程度上受到影响,简单只是读取您的配置文件,然后创建一个临时文件,其中包含必要的代码以加载并与套接字或http

通信

答案 4 :(得分:-3)

我认为你要找的是特殊功能init

如果添加

func init() {

}

在包中,它将在第一次导入包时运行它。 这只发生在同一个二进制文件中。正如其他人已经说过go不支持动态加载的库。