当前位置: 首页 > 面试题库 >

在Go中开发插件?

石正奇
2023-03-14
问题内容

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

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

Go中可能有同样的事情吗?


问题答案:

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

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

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

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

这是两种可能的方法:

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

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

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

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

解决方案2:单独的过程

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

最后一个写过几个Eclipse插件的人的笔记: 把事情简单化。



 类似资料:
  • FIS3 是以 File 对象为中心构建编译的,每一个 File 都要经历编译、打包、发布三个阶段。运行原理讲述了 FIS3 中的插件扩展点;那么本节就将说明一个插件如何开发; 如上图,编译起初,扫描项目目录下的所有文件(不包含指定排除文件),后实例化 File 对象,并对 File 内容进行编译分析; 编译阶段插件 在编译阶段,文件是单文件进行编译的,这个阶段主要是对文件内容的编译分析;这个阶段

  • 插件需要 export 一个函数,函数会接收到两个参数,第一个是 build-scripts 提供的 pluginAPI,第二个是用户传给插件的自定义参数,如下: module.exports = (pluginAPI, options) => { const { context, log, onHook } = pluginAPI; }; pluginAPI

  • 初始化插件 你可以通过 create-umi 直接创建一个 umi 插件的脚手架: $ yarn create umi --plugin 在 umi 中,插件实际上就是一个 JS 模块,你需要定义一个插件的初始化方法并默认导出。如下示例: export default (api, opts) => { // your plugin code here }; 需要注意的是,如果你的插件需要发

  • 插件开发 消费器插件 继承AbstractDataConsumer类 通过spring.factories发布: cn.vbill.middleware.porter.core.task.consumer.DataConsumer=xxx 通过配置文件生效: porter.task[index].consumer.consumerName=pluginName EventConverte

  • 运行开发服务器 npm install npm install -g ykit #依赖 ykit npm run dev #启动开发服务器 加载插件 在config.json plugins配置项,加入 demo 插件, { "port": "3000", "db": { "servername": "127.0.0.1", "DATABASE": "yapi" }

  • QueryList支持安装插件来帮助丰富你的采集功能,目前收录的一些QueryList插件: https://github.com/jae-jae/QueryList-Community 如果大家在使用的过程中有在QueryList的基础上添加一些自己的功能,不妨做成一个QueryList插件,这样可以给其它QueryList使用者提供帮助,并且在其它人的使用反馈中的提升插件的质量。 接下来会以开