英文:
Dynamic loading in Golang?
问题
我有一个常见项目和一些作为常见项目中连接器的小项目。
我想创建一个常见项目,这样当开发一个新的连接器时,我就不必修改常见项目中的代码。是否可以在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)
英文:
I've got a common project and small projects which act such as connectors in the common project.
I want to create a common project such that when a new connector is developed I don’t have to modify code in the common project. Is it possible to dynamically load the structures in Go, only knowing the path (by putting this path in a file in common project and at runtime load that struct) of the struct and its folders?
connector1
connector1.go
/util
/domain
connectorN
connectorN.go
/domain
commonProject
main.go
config.ini
Structure config.ini
Conector
name = connector1
path = ..../connector1/connector1.go
Conector
name = connectorN
path = ..../connectorN/connectorN.go
I know that this is possible to do this in Java with code like this, but I am trying to do this in Go. Any ideas?
Class.forName(String)
or
ClassLoader.loadClass(String):
答案1
得分: 2
我可以看到两种实现你描述的方式,但请记住,正如 @icza 指出的那样,Go 生成的是静态二进制文件,所以无法动态加载外部库。
不过,你可以:
- 使用
cgo
与 C 代码进行接口交互,并以这种方式加载外部库。 - 使用
net/rpc
包使多个二进制文件相互通信,并按需加载它们。
英文:
I can see two ways to achieve what you describe, but keep in mind, as @icza pointed out, that go produces static binaries, so you can't load external libraries dynamically.
You can, however:
- use
cgo
to interface with C code, and load external libraries that
way. - use the
net/rpc
package to have several binaries communicate
with each other, and load those on demand.
答案2
得分: 1
在Java中,类是在需要时动态加载的,当它们被使用或引用时。
Go生成静态链接的本机二进制文件,没有外部依赖,因此无法像Java中使用Class.forName()
那样以某种方式加载新的“类型”或“函数”(至少不是用Go编写的代码)。
英文:
In Java classes are loaded dynamically, on demand, when they are used/referred to.
Go produces statically linked native binaries without external dependencies, so you can't load new "types" or "functions" in a way you can do in Java with the Class.forName()
(at least not code written in Go).
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论