增强插件系统:添加插件执行功能
- 在插件接口和基本插件实现中新增 Execute 方法,支持插件功能的动态执行。 - 更新各个插件(如日志插件、统计插件、存储插件等)以实现 Execute 方法,允许通过操作名称和参数执行特定功能。 - 在插件管理器中添加 ExecutePlugin、ExecutePluginsByType 和 ExecuteAllPlugins 方法,便于批量执行插件操作。 - 示例程序中更新插件调用方式,展示如何使用 Execute 方法进行操作。 此更新提升了插件系统的灵活性和可扩展性,便于开发者动态管理和执行插件功能。
This commit is contained in:
@@ -94,6 +94,47 @@ func (p *LogPlugin) Stop(ctx context.Context) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Execute 实现Execute方法以满足Plugin接口
|
||||
func (p *LogPlugin) Execute(ctx context.Context, action string, params map[string]interface{}) (interface{}, error) {
|
||||
switch action {
|
||||
case "log":
|
||||
// 需要参数: message
|
||||
message, ok := params["message"].(string)
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("缺少必需参数: message")
|
||||
}
|
||||
p.Log(message)
|
||||
return true, nil
|
||||
|
||||
case "setLevel":
|
||||
// 需要参数: level
|
||||
level, ok := params["level"].(string)
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("缺少必需参数: level")
|
||||
}
|
||||
p.level = level
|
||||
return true, nil
|
||||
|
||||
case "getLevel":
|
||||
// 不需要参数,返回当前日志级别
|
||||
return p.level, nil
|
||||
|
||||
case "getStatus":
|
||||
// 返回插件状态信息
|
||||
status := map[string]interface{}{
|
||||
"name": p.name,
|
||||
"version": p.version,
|
||||
"level": p.level,
|
||||
"enabled": p.enabled,
|
||||
"type": p.Type(),
|
||||
}
|
||||
return status, nil
|
||||
|
||||
default:
|
||||
return nil, fmt.Errorf("未知的操作: %s", action)
|
||||
}
|
||||
}
|
||||
|
||||
// Log 记录日志
|
||||
func (p *LogPlugin) Log(message string) {
|
||||
fmt.Printf("[%s][%s] %s\n", p.name, p.level, message)
|
||||
@@ -179,6 +220,10 @@ func main() {
|
||||
// 这里可以根据插件类型执行特定操作
|
||||
if logPlugin, ok := p.(*LogPlugin); ok {
|
||||
logPlugin.Log("这是一条测试日志消息")
|
||||
// 改用Execute方法调用
|
||||
logPlugin.Execute(ctx, "log", map[string]interface{}{
|
||||
"message": "这是一条测试日志消息",
|
||||
})
|
||||
}
|
||||
}
|
||||
break
|
||||
@@ -196,6 +241,10 @@ func main() {
|
||||
fmt.Printf("工具类插件: %s\n", p.Name())
|
||||
if logPlugin, ok := p.(*LogPlugin); ok {
|
||||
logPlugin.Log("通过类型获取到的日志插件记录消息")
|
||||
// 改用Execute方法调用
|
||||
logPlugin.Execute(ctx, "log", map[string]interface{}{
|
||||
"message": "通过类型获取到的日志插件记录消息",
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -206,6 +255,10 @@ func main() {
|
||||
fmt.Printf("通用类型插件: %s\n", p.Name())
|
||||
if logPlugin, ok := p.(*LogPlugin); ok {
|
||||
logPlugin.Log("通过类型获取到的通用类型插件记录消息")
|
||||
// 改用Execute方法调用
|
||||
logPlugin.Execute(ctx, "log", map[string]interface{}{
|
||||
"message": "通过类型获取到的通用类型插件记录消息",
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user