正如标题所说,我希望基于仅在运行时可用的信息动态加载Go包(或不动态加载).
其目标是允许用户通过添加新的原生脚本命令的自定义包来扩展程序.目前,每当我添加新命令或想要禁止某些命令时,我都需要编辑程序并重新编译,而如果我可以制作某种DLL或类似的东西,那么我可以创建一个"import"脚本命令来搜索和加载命名命令库.
出于好奇,我们讨论的程序是基于自定义命令的脚本库,我将其用于各种用途.
我提前做了一些搜索,结果看起来不太好,但我找不到明确的否.
正如标题所说,我希望基于仅在运行时可用的信息动态加载Go包(或不动态加载).
其目标是允许用户通过添加新的原生脚本命令的自定义包来扩展程序.目前,每当我添加新命令或想要禁止某些命令时,我都需要编辑程序并重新编译,而如果我可以制作某种DLL或类似的东西,那么我可以创建一个"import"脚本命令来搜索和加载命名命令库.
出于好奇,我们讨论的程序是基于自定义命令的脚本库,我将其用于各种用途.
我提前做了一些搜索,结果看起来不太好,但我找不到明确的否.
Go还不支持动态库.Elias Naur最近发布了一些补丁,但尚未对它们进行审查,它们不太可能包含在Go 1.2中.你可以阅读关于谷歌群组的讨论:
据我所知,这是关于这个话题的最新讨论.
然而,还有另一种方法.您可以在单独的进程中启动您的插件,并使用net/rpc包与您的主应用程序进行通信.这还允许您动态启动/停止/重新编译单独的插件,并且它的优点是坏的插件不会使您的程序崩溃.围棋擅长网络沟通,你只要好好利用它就行了.
我需要编辑程序并重新编译,
您还可以考虑编写一个小脚本来监视当前目录中的更改(使用fstification)并执行"go build",然后重新启动您的程序.在本地开发期间,我在我的一些Web项目中使用了这种方法,它工作得很好.我无法观察到任何编译时间,而且我切换和刷新浏览器窗口的速度相当快.在我的Python开发周期中,解释器必须重新启动,每次更改都必须重新导入所有模块(在较大的项目中,这可能需要相当长的时间!),与之相比,我感觉非常笨拙.