fscan/app/initializer.go
ZacharyZcR b463984e78 refactor: 重构main.go入口文件并引入依赖注入架构
- 创建app包实现依赖注入容器和初始化器模式
- 重构main.go为六阶段清晰的初始化流程
- 新增结构化错误处理替代简陋的os.Exit调用
- 为HostInfo添加辅助函数增强功能但保持向后兼容
- 引入TargetInfo包装器支持上下文和元数据管理
- 优化代码组织提升可维护性和可测试性
2025-08-12 14:37:28 +08:00

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()
}