Files
goproxy/examples/plugin/interface.go
DarkiT 0990e8c42c 增强插件系统:添加硬件插件类型及默认插件构造函数
- 在插件类型中新增硬件插件类型(PluginTypeHardware),以支持更多插件类型的扩展。
- 添加便捷的构造函数 NewBasePluginWithDefaultType 和 NewPluginWithDefaultType,简化插件创建过程,适用于不需要指定特殊类型的场景。
- 更新日志插件和统计插件的创建示例,展示如何使用默认插件类型。

此更新提升了插件系统的灵活性,便于开发者快速创建和管理插件。
2025-03-14 11:14:47 +08:00

122 lines
3.1 KiB
Go

package plugin
// PluginType 插件类型
type PluginType string
// 预定义的插件类型
const (
PluginTypeGeneral PluginType = "general" // 通用插件
PluginTypeStorage PluginType = "storage" // 存储插件
PluginTypeSecurity PluginType = "security" // 安全插件
PluginTypeUI PluginType = "ui" // 用户界面插件
PluginTypeNetwork PluginType = "network" // 网络插件
PluginTypeUtils PluginType = "utils" // 工具插件
PluginTypeHardware PluginType = "hardware" // 硬件插件
// 可以根据需求添加更多插件类型
)
// 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)
}
// 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
}