# Go Desk 设备调用测试功能设计 > **文档版本**:v0.1.0 > **创建时间**:2026-01-20 > **维护者**:JueChen > **状态**:设计阶段 ## 1. 功能概述 实现系统资源访问和设备调用测试功能,验证 Wails 应用与系统资源的交互能力。 ## 2. 功能需求 ### 2.1 系统信息获取 - [ ] CPU 信息:核心数、使用率、型号 - [ ] 内存信息:总内存、已用内存、可用内存 - [ ] 磁盘信息:磁盘列表、总容量、已用容量、可用容量 - [ ] 系统信息:操作系统、架构、主机名 - [ ] 网络信息:IP 地址、网络接口列表 ### 2.2 文件系统操作 - [ ] 读取文件:读取指定路径的文件内容 - [ ] 写入文件:写入内容到指定文件 - [ ] 列出目录:获取目录下的文件和文件夹列表 - [ ] 创建目录:创建新目录 - [ ] 删除文件/目录:删除指定路径的文件或目录 - [ ] 文件信息:获取文件大小、修改时间、权限等 ### 2.3 系统操作 - [ ] 环境变量:读取系统环境变量 - [ ] 执行命令:执行系统命令(可选,需谨慎) - [ ] 打开文件/目录:使用系统默认程序打开 - [ ] 文件选择对话框:选择文件或目录 ### 2.4 进程信息 - [ ] 进程列表:获取当前运行的进程列表 - [ ] 进程详情:获取指定进程的详细信息 ## 3. 技术实现 ### 3.1 Go 后端实现 #### 3.1.1 系统信息模块 ```go // internal/system/system.go package system // GetSystemInfo 获取系统信息 func GetSystemInfo() (map[string]interface{}, error) // GetCPUInfo 获取 CPU 信息 func GetCPUInfo() (map[string]interface{}, error) // GetMemoryInfo 获取内存信息 func GetMemoryInfo() (map[string]interface{}, error) // GetDiskInfo 获取磁盘信息 func GetDiskInfo() ([]map[string]interface{}, error) ``` #### 3.1.2 文件系统模块 ```go // internal/filesystem/fs.go package filesystem // ReadFile 读取文件 func ReadFile(path string) (string, error) // WriteFile 写入文件 func WriteFile(path, content string) error // ListDir 列出目录 func ListDir(path string) ([]map[string]interface{}, error) // CreateDir 创建目录 func CreateDir(path string) error // DeletePath 删除文件或目录 func DeletePath(path string) error // GetFileInfo 获取文件信息 func GetFileInfo(path string) (map[string]interface{}, error) ``` #### 3.1.3 App 方法暴露 ```go // app.go 中添加方法 // GetSystemInfo 获取系统信息 func (a *App) GetSystemInfo() (map[string]interface{}, error) // GetCPUInfo 获取 CPU 信息 func (a *App) GetCPUInfo() (map[string]interface{}, error) // GetMemoryInfo 获取内存信息 func (a *App) GetMemoryInfo() (map[string]interface{}, error) // GetDiskInfo 获取磁盘信息 func (a *App) GetDiskInfo() ([]map[string]interface{}, error) // ReadFile 读取文件 func (a *App) ReadFile(path string) (string, error) // WriteFile 写入文件 func (a *App) WriteFile(path, content string) error // ListDir 列出目录 func (a *App) ListDir(path string) ([]map[string]interface{}, error) // CreateDir 创建目录 func (a *App) CreateDir(path string) error // DeletePath 删除文件或目录 func (a *App) DeletePath(path string) error // GetFileInfo 获取文件信息 func (a *App) GetFileInfo(path string) (map[string]interface{}, error) // GetEnvVars 获取环境变量 func (a *App) GetEnvVars() (map[string]string, error) // OpenPath 打开文件或目录 func (a *App) OpenPath(path string) error ``` ### 3.2 前端实现 #### 3.2.1 系统信息展示 - 系统信息卡片(Arco Card) - 实时刷新按钮 - 信息表格展示 #### 3.2.2 文件系统操作界面 - 文件浏览器组件 - 路径输入框 - 操作按钮(读取、写入、删除等) - 文件内容编辑器(文本区域) #### 3.2.3 测试页面布局 ``` ┌─────────────────────────────────────┐ │ 系统信息测试 │ ├─────────────────────────────────────┤ │ [刷新] │ │ ┌─────────┬─────────┬─────────┐ │ │ │ CPU │ 内存 │ 磁盘 │ │ │ └─────────┴─────────┴─────────┘ │ └─────────────────────────────────────┘ ┌─────────────────────────────────────┐ │ 文件系统测试 │ ├─────────────────────────────────────┤ │ 路径: [________________] [浏览] │ │ ┌───────────────────────────────┐ │ │ │ 文件列表 │ │ │ │ - file1.txt │ │ │ │ - folder1/ │ │ │ └───────────────────────────────┘ │ │ [读取] [写入] [删除] [创建目录] │ └─────────────────────────────────────┘ ``` ## 4. 依赖库 ### 4.1 Go 依赖 ```go // 系统信息 github.com/shirou/gopsutil/v3/cpu github.com/shirou/gopsutil/v3/mem github.com/shirou/gopsutil/v3/disk github.com/shirou/gopsutil/v3/host // 文件操作 os path/filepath io/ioutil // 系统操作 os/exec runtime ``` ### 4.2 安装命令 ```bash go get github.com/shirou/gopsutil/v3/cpu go get github.com/shirou/gopsutil/v3/mem go get github.com/shirou/gopsutil/v3/disk go get github.com/shirou/gopsutil/v3/host ``` ## 5. 实现细节 ### 5.1 系统信息获取 **CPU 信息**: - 使用 `gopsutil/cpu` 获取 CPU 核心数、使用率 - 使用 `runtime.NumCPU()` 获取逻辑核心数 **内存信息**: - 使用 `gopsutil/mem` 获取内存统计 - 转换为 MB/GB 单位显示 **磁盘信息**: - 使用 `gopsutil/disk` 获取磁盘分区和使用情况 - 过滤系统盘和可访问盘 **系统信息**: - 使用 `gopsutil/host` 获取主机信息 - 使用 `runtime.GOOS` 和 `runtime.GOARCH` 获取平台信息 ### 5.2 文件系统操作 **路径安全**: - 验证路径合法性 - 防止路径遍历攻击 - 限制操作范围(可选) **错误处理**: - 文件不存在 - 权限不足 - 路径无效 **文件编码**: - 文本文件使用 UTF-8 - 二进制文件提示用户 ### 5.3 跨平台兼容 - Windows:使用 `os/exec` 执行系统命令 - Linux/Mac:使用相应的系统调用 - 路径分隔符:使用 `filepath.Join` 处理 ## 6. 文件结构 ``` go-desk/ ├── internal/ │ ├── system/ │ │ └── system.go # 系统信息获取 │ └── filesystem/ │ └── fs.go # 文件系统操作 ├── app.go # 添加系统调用方法 └── frontend/src/ └── components/ ├── SystemInfo.vue # 系统信息组件 └── FileSystem.vue # 文件系统组件 ``` ## 7. 安全考虑 1. **路径验证**:防止路径遍历攻击 2. **权限检查**:确保有足够的权限执行操作 3. **操作限制**:限制危险操作(如删除系统文件) 4. **输入验证**:验证所有用户输入 5. **错误信息**:不暴露敏感系统信息 ## 8. 测试用例 ### 8.1 系统信息测试 - [ ] 获取 CPU 信息成功 - [ ] 获取内存信息成功 - [ ] 获取磁盘信息成功 - [ ] 信息格式正确 ### 8.2 文件系统测试 - [ ] 读取文件成功 - [ ] 写入文件成功 - [ ] 列出目录成功 - [ ] 创建目录成功 - [ ] 删除文件成功 - [ ] 路径验证有效 - [ ] 错误处理正确 ## 9. 开发优先级 ### 阶段一:基础系统信息 - [ ] CPU 信息获取 - [ ] 内存信息获取 - [ ] 系统基本信息 ### 阶段二:文件系统基础操作 - [ ] 读取文件 - [ ] 列出目录 - [ ] 文件信息获取 ### 阶段三:文件系统完整操作 - [ ] 写入文件 - [ ] 创建目录 - [ ] 删除文件/目录 ### 阶段四:高级功能 - [ ] 磁盘信息 - [ ] 网络信息 - [ ] 环境变量 - [ ] 打开文件/目录 ## 10. 注意事项 1. **性能**:系统信息获取可能较慢,考虑异步调用 2. **权限**:某些操作需要管理员权限 3. **跨平台**:不同平台的行为可能不同 4. **错误处理**:完善的错误提示和日志记录 --- **下一步**:根据此设计文档开始实现设备调用测试功能。