package config import ( "context" "log" "os" "sync" ) // FileDeletionManager 用于管理需要删除的文件列表 type FileDeletionManager struct { mu sync.Mutex files map[string]bool cancelFn context.CancelFunc ctx context.Context } var deleteInstance *FileDeletionManager var deleteOnce sync.Once // NewFileDeletionManager 创建或获取一个单例的FileDeletionManager func NewFileDeletionManager() *FileDeletionManager { deleteOnce.Do(func() { c := context.Background() ctx, cancel := context.WithCancel(c) deleteInstance = &FileDeletionManager{ files: make(map[string]bool), cancelFn: cancel, ctx: ctx, } }) return deleteInstance } // AddFile 添加文件路径到删除列表 func (f *FileDeletionManager) AddFile(filePath string) { f.mu.Lock() defer f.mu.Unlock() f.files[filePath] = true } // DeleteFiles 删除所有在列表中的文件 func (f *FileDeletionManager) DeleteFiles() { f.mu.Lock() files := make([]string, 0, len(f.files)) for file := range f.files { files = append(files, file) } f.mu.Unlock() for _, file := range files { select { case <-f.ctx.Done(): log.Println("文件删除操作已取消") return default: err := os.Remove(file) if err != nil { log.Printf("删除文件 %s 失败: %v\n", file, err) } else { f.mu.Lock() delete(f.files, file) // 删除成功后从列表中移除文件 f.mu.Unlock() log.Printf("文件 %s 已成功删除", file) } } } } // Cancel 取消删除操作 func (f *FileDeletionManager) Cancel() { f.cancelFn() }