增强插件系统:添加硬件插件类型及默认插件构造函数
- 在插件类型中新增硬件插件类型(PluginTypeHardware),以支持更多插件类型的扩展。 - 添加便捷的构造函数 NewBasePluginWithDefaultType 和 NewPluginWithDefaultType,简化插件创建过程,适用于不需要指定特殊类型的场景。 - 更新日志插件和统计插件的创建示例,展示如何使用默认插件类型。 此更新提升了插件系统的灵活性,便于开发者快速创建和管理插件。
This commit is contained in:
@@ -15,19 +15,32 @@ type LogPlugin struct {
|
||||
version string
|
||||
description string
|
||||
author string
|
||||
pluginType plugin.PluginType
|
||||
enabled bool
|
||||
level string
|
||||
pluginType plugin.PluginType
|
||||
}
|
||||
|
||||
// 创建内置日志插件
|
||||
// 创建内置日志插件 - 示例1:明确指定插件类型
|
||||
func NewLogPlugin() *LogPlugin {
|
||||
return &LogPlugin{
|
||||
name: "InternalLogPlugin",
|
||||
version: "1.0.0",
|
||||
description: "内置日志插件,在不支持动态加载插件的平台上使用",
|
||||
author: "开发者",
|
||||
pluginType: plugin.PluginTypeUtils, // 设置为工具类插件
|
||||
pluginType: plugin.PluginTypeUtils, // 明确指定为工具类插件
|
||||
enabled: true,
|
||||
level: "info",
|
||||
}
|
||||
}
|
||||
|
||||
// 创建内置日志插件 - 示例2:使用默认插件类型(通用插件)
|
||||
func NewDefaultLogPlugin() *LogPlugin {
|
||||
return &LogPlugin{
|
||||
name: "DefaultLogPlugin",
|
||||
version: "1.0.0",
|
||||
description: "使用默认类型的内置日志插件示例",
|
||||
author: "开发者",
|
||||
pluginType: plugin.PluginTypeGeneral, // 自动设置为通用插件类型
|
||||
enabled: true,
|
||||
level: "info",
|
||||
}
|
||||
@@ -67,23 +80,23 @@ func (p *LogPlugin) Init(ctx context.Context, config map[string]interface{}) err
|
||||
if level, ok := config["level"].(string); ok {
|
||||
p.level = level
|
||||
}
|
||||
fmt.Println("内置日志插件已初始化,日志级别:", p.level)
|
||||
fmt.Printf("内置日志插件[%s]已初始化,日志级别: %s, 插件类型: %s\n", p.name, p.level, p.Type())
|
||||
return nil
|
||||
}
|
||||
|
||||
func (p *LogPlugin) Start(ctx context.Context) error {
|
||||
fmt.Println("内置日志插件已启动")
|
||||
fmt.Printf("内置日志插件[%s]已启动\n", p.name)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (p *LogPlugin) Stop(ctx context.Context) error {
|
||||
fmt.Println("内置日志插件已停止")
|
||||
fmt.Printf("内置日志插件[%s]已停止\n", p.name)
|
||||
return nil
|
||||
}
|
||||
|
||||
// Log 记录日志
|
||||
func (p *LogPlugin) Log(message string) {
|
||||
fmt.Printf("[%s] %s\n", p.level, message)
|
||||
fmt.Printf("[%s][%s] %s\n", p.name, p.level, message)
|
||||
}
|
||||
|
||||
func main() {
|
||||
@@ -97,9 +110,16 @@ func main() {
|
||||
} else {
|
||||
fmt.Printf("当前系统(%s)不支持动态加载插件\n", runtime.GOOS)
|
||||
|
||||
// 在不支持动态加载的系统上使用内置插件
|
||||
// 在不支持动态加载的系统上注册内置插件
|
||||
// 示例1:注册明确指定类型的插件
|
||||
logPlugin := NewLogPlugin()
|
||||
pm.RegisterPlugin(logPlugin)
|
||||
|
||||
// 示例2:注册使用默认类型的插件
|
||||
defaultLogPlugin := NewDefaultLogPlugin()
|
||||
pm.RegisterPlugin(defaultLogPlugin)
|
||||
|
||||
fmt.Println("已注册两个内置插件以展示不同的插件类型设置方式")
|
||||
}
|
||||
|
||||
// 加载插件
|
||||
@@ -154,7 +174,7 @@ func main() {
|
||||
if len(plugins) > 0 {
|
||||
for _, info := range plugins {
|
||||
if info.Enabled {
|
||||
fmt.Printf("正在使用插件: %s\n", info.Name)
|
||||
fmt.Printf("正在使用插件: %s (类型: %s)\n", info.Name, info.Type)
|
||||
if p, ok := pm.GetPlugin(info.Name); ok {
|
||||
// 这里可以根据插件类型执行特定操作
|
||||
if logPlugin, ok := p.(*LogPlugin); ok {
|
||||
@@ -168,6 +188,8 @@ func main() {
|
||||
|
||||
// 按类型获取和使用插件
|
||||
fmt.Println("\n按类型获取插件:")
|
||||
|
||||
// 获取工具类插件
|
||||
utilsPlugins := pm.GetPluginsByType(plugin.PluginTypeUtils)
|
||||
fmt.Printf("找到 %d 个工具类插件\n", len(utilsPlugins))
|
||||
for _, p := range utilsPlugins {
|
||||
@@ -177,6 +199,16 @@ func main() {
|
||||
}
|
||||
}
|
||||
|
||||
// 获取通用类型插件
|
||||
generalPlugins := pm.GetPluginsByType(plugin.PluginTypeGeneral)
|
||||
fmt.Printf("找到 %d 个通用类型插件\n", len(generalPlugins))
|
||||
for _, p := range generalPlugins {
|
||||
fmt.Printf("通用类型插件: %s\n", p.Name())
|
||||
if logPlugin, ok := p.(*LogPlugin); ok {
|
||||
logPlugin.Log("通过类型获取到的通用类型插件记录消息")
|
||||
}
|
||||
}
|
||||
|
||||
// 停止插件
|
||||
fmt.Println("\n正在停止插件...")
|
||||
if err := pm.StopPlugins(ctx); err != nil {
|
||||
|
Reference in New Issue
Block a user