mirror of
https://github.com/shadow1ng/fscan.git
synced 2025-09-14 05:56:46 +08:00

- 创建app包实现依赖注入容器和初始化器模式 - 重构main.go为六阶段清晰的初始化流程 - 新增结构化错误处理替代简陋的os.Exit调用 - 为HostInfo添加辅助函数增强功能但保持向后兼容 - 引入TargetInfo包装器支持上下文和元数据管理 - 优化代码组织提升可维护性和可测试性
66 lines
1.3 KiB
Go
66 lines
1.3 KiB
Go
package app
|
|
|
|
import (
|
|
"sort"
|
|
|
|
"github.com/shadow1ng/fscan/common"
|
|
"github.com/shadow1ng/fscan/plugins/base"
|
|
)
|
|
|
|
// Initializer 初始化器接口
|
|
type Initializer interface {
|
|
Initialize() error
|
|
Name() string
|
|
}
|
|
|
|
// PluginInitializer 插件初始化器
|
|
type PluginInitializer struct{}
|
|
|
|
func (p *PluginInitializer) Name() string {
|
|
return "PluginInitializer"
|
|
}
|
|
|
|
func (p *PluginInitializer) Initialize() error {
|
|
var localPlugins []string
|
|
|
|
// 获取所有注册的插件
|
|
allPlugins := base.GlobalPluginRegistry.GetAll()
|
|
|
|
for _, pluginName := range allPlugins {
|
|
metadata := base.GlobalPluginRegistry.GetMetadata(pluginName)
|
|
if metadata != nil && metadata.Category == "local" {
|
|
localPlugins = append(localPlugins, pluginName)
|
|
}
|
|
}
|
|
|
|
// 排序以保持一致性
|
|
sort.Strings(localPlugins)
|
|
|
|
// 设置全局变量
|
|
common.LocalPluginsList = localPlugins
|
|
|
|
return nil
|
|
}
|
|
|
|
// LoggerInitializer 日志初始化器
|
|
type LoggerInitializer struct{}
|
|
|
|
func (l *LoggerInitializer) Name() string {
|
|
return "LoggerInitializer"
|
|
}
|
|
|
|
func (l *LoggerInitializer) Initialize() error {
|
|
common.InitLogger()
|
|
return nil
|
|
}
|
|
|
|
// OutputInitializer 输出初始化器
|
|
type OutputInitializer struct{}
|
|
|
|
func (o *OutputInitializer) Name() string {
|
|
return "OutputInitializer"
|
|
}
|
|
|
|
func (o *OutputInitializer) Initialize() error {
|
|
return common.InitOutput()
|
|
} |