Golang中的动态加载?

时间:2015-05-07 09:47:28

标签: java go

我有一个共同的项目和小项目,例如公共项目中的连接器。

我想创建一个公共项目,以便在开发新连接器时,我不必修改公共项目中的代码。是否有可能在Go中动态加载结构,只知道结构及其文件夹的路径(通过将此路径放在公共项目的文件中并在运行时加载该结构)?

connector1
  connector1.go
  /util
  /domain

connectorN
  connectorN.go 
  /domain

commonProject
   main.go
   config.ini

结构config.ini

Conector
name = connector1
path = ..../connector1/connector1.go

Conector
name = connectorN
path = ..../connectorN/connectorN.go

我知道在Java中可以使用这样的代码执行此操作,但我尝试在Go中执行此操作。有什么想法吗?

Class.forName(String) 

ClassLoader.loadClass(String):

2 个答案:

答案 0 :(得分:1)

我可以看到两种方法来实现您所描述的内容,但请记住,正如@icza指出的那样,go会生成静态二进制文件,因此您无法动态加载外部库。

但是你可以:

  • 使用cgo与C代码交互,并加载外部库 方式。
  • 使用net/rpc包让几个二进制文件进行通信 彼此相关,并根据需要加载。

答案 1 :(得分:0)

在Java类中,在使用/引用时,按需动态加载。

Go生成静态链接的本机二进制文件,没有外部依赖关系,因此您无法加载新的"类型"或"功能"在某种程度上,您可以使用Class.forName()在Java中完成(至少不是用Go编写的代码)。