为了账号安全,请及时绑定邮箱和手机立即绑定

在Go中开发插件?

在Go中开发插件?

Go
慕妹3242003 2021-05-13 09:10:25
可以动态运行以便用于基于插件的应用程序吗?在eclipse中,我们可以创建Eclipse可以动态运行的一些插件。Go中可能有同样的事情吗?
查看完整描述

3 回答

?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

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

  1. 具有动态负载

  2. 有插件

第一个完全不是:Go程序是静态链接的,这意味着您无法将代码添加到正在运行的程序中。这也意味着您必须编译该程序以使其集成插件。

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

这是两种可能的方法:

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

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

这可能不像Java那样简单,因为您必须重新编译,并且必须在代码的某个点上导入“插件”(请参见数据库驱动程序的完成方式),但是考虑到Go在目录和导入方面的标准化,使用简单的makefile导入插件并重新编译应用程序似乎很容易解决。

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

解决方案2:分开的过程

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

编写了多个Eclipse插件的人的最后一封信:把事情简单化。


查看完整回答
反对 回复 2021-05-17
?
大话西游666

TA贡献1817条经验 获得超14个赞

不可能在运行时加载软件包。

在将来(或今天有局限性),可能有与项目类似的功能go-eval,这是“ Go的解释器的开始”。


查看完整回答
反对 回复 2021-05-17
  • 3 回答
  • 0 关注
  • 212 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信