package plugin import ( "fmt" ) // PluginType 插件类型 type PluginType string // 预定义的插件类型 const ( PluginTypeGeneral PluginType = "general" // 通用插件 PluginTypeStorage PluginType = "storage" // 存储插件 PluginTypeSecurity PluginType = "security" // 安全插件 PluginTypeNetwork PluginType = "network" // 网络插件 PluginTypeUtils PluginType = "utils" // 工具插件 PluginTypeHardware PluginType = "hardware" // 硬件插件 PluginTypeUI PluginType = "ui" // 用户界面插件 // 可以根据需求添加更多插件类型 ) // IPlugin 插件接口 // 这个文件定义了所有插件必须实现的接口 // 注意:这个文件应该与实际插件代码一起编译 type IPlugin interface { // Name 插件名称 Name() string // Version 插件版本 Version() string // Description 插件描述 Description() string // Author 插件作者 Author() string // Type 插件类型 Type() PluginType // Init 初始化插件 Init(config map[string]interface{}) error // Start 启动插件 Start() error // Stop 停止插件 Stop() error // IsEnabled 插件是否启用 IsEnabled() bool // SetEnabled 设置插件启用状态 SetEnabled(enabled bool) // Execute 执行插件功能 // action: 要执行的操作名称 // params: 操作所需的参数 // 返回操作结果和可能的错误 Execute(action string, params map[string]interface{}) (interface{}, error) } // BasePlugin 提供插件接口的基本实现 // 插件开发者可以嵌入此结构体,以减少需要实现的方法数量 type BasePlugin struct { name string version string description string author string pluginType PluginType enabled bool } // NewBasePlugin 创建一个基本插件 func NewBasePlugin(name, version, description, author string, pluginType PluginType) *BasePlugin { return &BasePlugin{ name: name, version: version, description: description, author: author, pluginType: pluginType, enabled: true, } } // NewBasePluginWithDefaultType 创建一个基本插件,使用默认的通用插件类型 // 这是一个便捷的构造函数,适用于不需要指定特殊类型的场景 func NewBasePluginWithDefaultType(name, version, description, author string) *BasePlugin { return NewBasePlugin(name, version, description, author, PluginTypeGeneral) } // Name 获取插件名称 func (p *BasePlugin) Name() string { return p.name } // Version 获取插件版本 func (p *BasePlugin) Version() string { return p.version } // Description 获取插件描述 func (p *BasePlugin) Description() string { return p.description } // Author 获取插件作者 func (p *BasePlugin) Author() string { return p.author } // Type 获取插件类型 func (p *BasePlugin) Type() PluginType { return p.pluginType } // IsEnabled 插件是否启用 func (p *BasePlugin) IsEnabled() bool { return p.enabled } // SetEnabled 设置插件启用状态 func (p *BasePlugin) SetEnabled(enabled bool) { p.enabled = enabled } // Init 初始化插件,子类需要重写此方法 func (p *BasePlugin) Init(config map[string]interface{}) error { return nil } // Start 启动插件,子类需要重写此方法 func (p *BasePlugin) Start() error { return nil } // Stop 停止插件,子类需要重写此方法 func (p *BasePlugin) Stop() error { return nil } // Execute 执行插件功能,子类需要重写此方法 func (p *BasePlugin) Execute(action string, params map[string]interface{}) (interface{}, error) { return nil, fmt.Errorf("插件 %s 不支持 %s 操作", p.name, action) }