我正在寻找Go语言的等效Architect。
使用Architect,模块公开“插件”。插件可以指定依赖项,并导出API以允许与其他插件进行交互。要启动应用程序实例,请指定插件列表。解析依赖关系,并按顺序加载(实例化)插件。
由于每个应用程序都创建了每个插件的单个实例,因此可以在同一个进程中启动多个应用程序而不会发生冲突。
编辑:我不需要动态加载其他模块。
答案 0 :(得分:2)
我不是一个能做到这一点的软件包,但对如何做到这一点有一些想法 - 希望它能提供帮助。
拥有Registry
和Plugin
接口,可能类似于:
type Registry {
// Register registers a plugin under name
Register(name string, plugin *Plugin) error
// Get plugin by name
Get(name string) (*Plugin, error)
}
// Global Registry
var GlobalRegistry Registry
type Plugin interface {
// Init is called upon plugin initialization. Will be in dependency order
Init(reg Registry) error
// Execute plugin command
Exec(name string, args... interface{}) (interface{}, error)
}
go build -tags plugin1,plugin2