123 lines
3.8 KiB
Markdown
123 lines
3.8 KiB
Markdown
# 任务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. 资源操作安全且高效 |