繁体   English   中英

在Go中开发插件?

[英]Develop plugins in Go?

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

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

围棋中可以做同样的事情吗?

我认为这是两个不同的问题:

  1. 有动态负荷
  2. 有插件

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

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

以下是两种可能的方法:

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

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

这可能不像在Java中那么简单,因为您必须重新编译,并且您必须在代码的某些方面导入“插件”(请参阅如何为数据库驱动程序完成 ),但是,考虑到Go关于目录和导入的标准化,使用简单的makefile导入插件并重新编译应用程序似乎很容易处理。

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

解决方案2:单独的过程

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

来自编写几个Eclipse插件的人的最后一个注释:你不要那么乱; 把事情简单化。

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

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

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

在未来(或今天有限制),可能有像go-eval这样的项目具有此功能,这是“Go的解释器的开始”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM