首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Go中开发插件?

在Go中开发插件?
EN

Stack Overflow用户
提问于 2012-09-16 10:34:54
回答 4查看 5.8K关注 0票数 20

可以动态运行,以便用于基于插件的应用程序吗?

在eclipse中,我们可以创建一些Eclipse可以动态运行的插件。

同样的事情在Go中也是可能的吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-09-16 18:22:23

我认为这是两个独立的问题:

具有动态加载的

  1. 具有插件的

第一个问题很简单: Go程序是静态链接的,这意味着你不能向正在运行的程序中添加代码。这也意味着你必须编译程序,让它集成插件。

幸运的是,你可以像大多数语言一样在Go中定义一个接受插件的程序,而Go,带有接口和快速编译并不会使这项任务变得困难。

以下是两种可能的方法:

解决方案1:集成在主程序中的插件

与Eclipse插件类似,我们可以通过简单地重新编译程序来将“插件”集成到主程序内存中。从这个意义上说,例如,我们可以说数据库驱动程序是插件。

这可能不像在Java中那么简单,因为你必须重新编译,并且你必须在你的代码的某个点导入“插件”(参见how it's done for database drivers),但是,考虑到Go关于目录和导入的标准化,使用一个简单的makefile导入插件并重新编译应用程序似乎很容易处理。

考虑到Go编译的简单性和速度,以及包结构的标准化,在我看来这是一个非常可行的解决方案。

解决方案2:独立的进程

在Go中,通信和处理异步调用特别容易。这意味着您可以基于多个通过命名管道(或任何网络解决方案)进行通信的进程来定义解决方案。请注意,Go中有一个rpc package。对于大多数程序来说,这可能是足够有效的,并且主程序将能够启动和停止插件进程。这感觉非常类似于您在Eclipse中所拥有的,并增加了内存空间保护的好处。

写过几个Eclipse插件的人的最后一句话是:你不想把事情搞得一团糟;保持简单。

票数 21
EN

Stack Overflow用户

发布于 2017-02-14 14:11:34

Go 1.8支持插件(即将于2017年2月发布。)

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

票数 3
EN

Stack Overflow用户

发布于 2012-09-16 20:28:16

正如dystroy已经说过的,不可能在运行时加载包。

在未来(或今天有限制的情况下),像go-eval这样的项目可能会有这个特性,它是“Go解释器的开始”。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12444022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档