package main import ( "context" "fmt" "os" "github.com/shadow1ng/fscan/app" "github.com/shadow1ng/fscan/common" ) func main() { // 创建应用容器 container := app.NewContainer() // 第一阶段:基础初始化(插件系统) if err := container.Initialize(); err != nil { handleError("基础初始化失败", err) } defer container.Cleanup() // 第二阶段:解析配置 var info common.HostInfo common.Flag(&info) // 第三阶段:日志初始化(依赖于flag解析) logInit := &app.LoggerInitializer{} if err := logInit.Initialize(); err != nil { handleError("日志初始化失败", err) } // 第四阶段:参数解析和验证 if err := common.Parse(&info); err != nil { handleError("参数解析失败", err) } // 第五阶段:输出系统初始化 outputInit := &app.OutputInitializer{} if err := outputInit.Initialize(); err != nil { handleError("输出初始化失败", err) } // 第六阶段:执行扫描 ctx := context.Background() if err := container.RunScan(ctx, info); err != nil { handleError("扫描失败", err) } } func handleError(msg string, err error) { // 检查是否是应用程序错误 if appErr, ok := err.(*app.AppError); ok { common.LogError(fmt.Sprintf("%s: %s", msg, appErr.Message)) if appErr.Cause != nil { common.LogError(fmt.Sprintf("详细错误: %v", appErr.Cause)) } os.Exit(appErr.Code) } else { common.LogError(fmt.Sprintf("%s: %v", msg, err)) os.Exit(1) } }