# 任务04:资源管理器实现 ## 任务描述 实现Installer Builder项目的资源管理器,负责处理文件和目录操作、临时文件管理、资源复制等功能。资源管理器将为构建过程提供统一的资源处理接口,确保资源操作的安全性和一致性。 ## 实现步骤 1. 定义资源管理器接口: - 在`internal/common/resource`包中创建`manager.go`文件 - 定义ResourceManager接口: ```go type ResourceManager interface { // 临时文件和目录管理 CreateTempDir(prefix string) (string, error) CreateTempFile(prefix string, suffix string) (string, error) CleanupTempDir(path string) error CleanupTempFile(path string) error // 文件和目录操作 CopyFile(src, dst string) error CopyDir(src, dst string, recursive bool) error EnsureDirExists(path string, perm os.FileMode) error FileExists(path string) (bool, error) DirExists(path string) (bool, error) // 文件内容操作 ReadFile(path string) ([]byte, error) WriteFile(path string, data []byte, perm os.FileMode) error AppendToFile(path string, data []byte) error // 路径操作 AbsPath(path string) (string, error) RelPath(path, basePath string) (string, error) JoinPath(elem ...string) string // 清理操作 Cleanup() error } ``` 2. 实现默认资源管理器: - 创建DefaultResourceManager结构体,实现ResourceManager接口: ```go type DefaultResourceManager struct { logger Logger tempDirs []string tempFiles []string cleanupOnExit bool mu sync.Mutex } ``` - 实现所有接口方法 3. 实现临时文件和目录管理: - 使用`ioutil.TempDir`和`ioutil.TempFile`创建临时资源 - 跟踪创建的临时资源,以便后续清理 - 实现安全的清理机制 4. 实现文件和目录操作: - 实现文件复制功能,保留文件权限 - 实现目录复制功能,支持递归复制 - 实现目录创建和检查功能 5. 实现文件内容操作: - 实现文件读取功能 - 实现文件写入功能,支持设置权限 - 实现文件追加功能 6. 实现路径操作: - 实现绝对路径转换 - 实现相对路径转换 - 实现路径连接,考虑不同平台的路径分隔符 7. 实现资源清理: - 实现Cleanup方法,清理所有临时资源 - 添加退出钩子,确保程序退出时清理资源 - 实现线程安全的清理机制 ## 单元测试要求 1. 测试临时文件和目录管理: - 验证临时资源创建 - 测试临时资源清理 - 测试并发创建和清理 2. 测试文件和目录操作: - 验证文件复制功能 - 测试目录复制功能 - 测试权限保留 3. 测试文件内容操作: - 验证文件读写功能 - 测试文件追加功能 - 测试大文件处理 4. 测试路径操作: - 验证路径转换功能 - 测试跨平台路径处理 5. 测试资源清理: - 验证Cleanup方法 - 测试退出钩子 - 测试异常情况下的资源清理 ## 依赖关系 - 依赖任务01(项目初始化) - 依赖任务02(日志系统实现) - 依赖任务03(错误处理框架) - 被任务05(配置模型定义)及后续任务依赖 ## 完成标准 1. ResourceManager接口已定义并文档完善 2. DefaultResourceManager实现了所有接口方法 3. 临时资源管理功能正常工作 4. 文件和目录操作功能正常工作 5. 文件内容操作功能正常工作 6. 路径操作功能正常工作 7. 资源清理功能正常工作 8. 所有单元测试通过 9. 代码符合项目的Go语言开发规范 10. 资源操作安全且高效