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

是否可以动态加载Go代码?

微生俊捷
2023-03-14
问题内容

如标题所述,我想基于仅在运行时可用的信息来动态加载(或不)动态加载Go软件包。

目的是允许用户通过添加新的本机脚本命令的自定义程序包扩展程序。当前,每次我添加新命令或禁止使用某些命令时,都需要编辑程序并重新编译,而如果我可以制作某种dll之类的文件,则可以创建一个“导入”脚本命令来搜索和加载命名命令库。

出于好奇,该程序是基于定制命令的脚本库,我将其用于各种用途。

我提前进行了一些搜索,结果看起来不太好,但是我找不到明确的答案。


问题答案:

Go还不支持动态库。Elias Naur最近发布了一些修补程序,但尚未对其进行审核,并且不太可能将它们包含在Go
1.2中。您可以阅读有关Google网上论坛的讨论:

  • https://groups.google.com/d/topic/golang-nuts/o0VTTqC8hOU/discussion
  • https://groups.google.com/d/topic/golang-nuts/P05BDjLcQ5k/discussion

据我所知,这是关于该主题的最新讨论。

但是,还有另一种方法。您可以在单独的过程中启动插件,并使用net /
rpc
包与您的主应用程序通信。这也使您可以动态地启动/停止/重新编译单独的插件,并且它的优点是不良的插件不会使您的程序崩溃。Go擅长网络通信,您只需充分利用它即可。

我需要编辑程序并重新编译,

您也可以考虑编写一个小的脚本,该脚本监视当前目录中的更改(使用fsnotify),并执行“执行构建”操作,然后重新启动程序。在本地开发期间,我在某些Web项目中使用了这种方法,并且效果很好。我看不到任何编译时间,并且在切换和刷新浏览器窗口时非常快。与Go相比,我的Python开发周期必须重新启动解释器,并且每次更改都必须重新导入所有模块(在大型项目中可能要花费大量时间!)。



 类似资料:
  • 我们有一个web应用程序,我们想在“批处理”模式下运行,在这种模式下,我们不希望任何endpoint暴露(出于安全原因)。 这在SpringBoot可能吗?

  • 问题内容: 我正在编写一个具有静态外部“外壳”和动态内容部分的Web应用程序。用户浏览系统时,动态内容部分具有许多更新。加载新的内容块时,还可以选择加载另一个JavaScript文件。我以良好的内务管理名义,从DOM中删除了适用于旧内容块的脚本块,因为不再需要JavaScript。 接下来是问题,当我意识到尽管我已经从DOM中删除了该元素,但是先前评估过的JavaScript仍然可以执行。这当然是

  • 问题描述 之前做过一个项目,我们使用的是 jsonscheme 来渲染页面。我就在想我能不能直接让使用方提供一个 cdn 的地址,然后我将它的组件渲染出来? 问题出现的环境背景及自己尝试过哪些方法 这里主要是为了做业务解耦,所以 ()=>import 的方式不太适合。 我们用了 jsonscheme 基于配置平台下发实现了动态渲染 也使用了一些开源的低码无码平台。(也可以理解为基于 jsonsch

  • 大多数情况下使用静态json数据通过使用D3.Hierarchy生成树状图或可折叠的力图。但问题是,数据是动态的而不是静态的呢?另一方面,是否有任何方法或函数可以将子级添加到已经存在的D3.Hierarchy对象中? 我读过很多关于如何用D3制作一个可折叠的力定向的例子。但大多数使用的是静态json数据。 因此,我不需要为根数据重新创建层次结构,我只需创建一个子层次结构对象并将其添加到根中。

  • 问题内容: 我已使用批注将其用于获取计算的属性。我需要的是那些用注解注解的字段/获取器应延迟加载。 这甚至有可能吗? 谢谢 问题答案: 是的。只需使用@Basic(fetch = FetchType.LAZY) 注释属性的字段/ 获取器,然后使用hibernate提供的此ant任务即可为实体类进行字节码检测。否则,将默默忽略该属性的LAZY加载。 该文档包含有关如何使用此ant任务进行字节码检测的

  • 问题内容: 是否可以 不 尝试加载就知道是否已加载Java类?尝试加载该类,但我不希望出现这种副作用。还有另一种方法吗? (我不想覆盖类加载器。我正在寻找一个相对简单的方法。) 问题答案: (感谢Aleksi)此代码: 产生: 请注意,示例类不在软件包中。完整的二进制名称是必需的。 二进制名称的一个示例是