Private
Public Access
1
0
Files
u-desk/docs/04-功能迭代/GO-DESK-1.尝试/设备调用测试功能设计.md

8.6 KiB
Raw Blame History

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 系统信息模块

// 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 文件系统模块

// 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 方法暴露

// 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 依赖

// 系统信息
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 安装命令

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.GOOSruntime.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. 错误处理:完善的错误提示和日志记录

下一步:根据此设计文档开始实现设备调用测试功能。