我有一个共同的项目和小项目,例如公共项目中的连接器。
我想创建一个公共项目,以便在开发新连接器时,我不必修改公共项目中的代码。是否有可能在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):
答案 0 :(得分:1)
我可以看到两种方法来实现您所描述的内容,但请记住,正如@icza指出的那样,go会生成静态二进制文件,因此您无法动态加载外部库。
但是你可以:
cgo
与C代码交互,并加载外部库
方式。net/rpc
包让几个二进制文件进行通信
彼此相关,并根据需要加载。答案 1 :(得分:0)
在Java类中,在使用/引用时,按需动态加载。
Go生成静态链接的本机二进制文件,没有外部依赖关系,因此您无法加载新的"类型"或"功能"在某种程度上,您可以使用Class.forName()
在Java中完成(至少不是用Go编写的代码)。