Private
Public Access
1
0
Files
u-desk/docs/04-功能迭代/GO-DESK-1.尝试/更新升级功能设计.md
绝尘 a5d30684ed 重构:文件系统模块化架构,增强 Markdown 渲染
- 拆分 FileSystem.vue 为模块化组件架构
- 新增 Markdown Mermaid 图表渲染支持
- 新增 180+ 编程语言代码高亮
- 修复编辑/预览模式切换渲染问题
- 优化亮色/暗色模式主题适配
- 新增 TypeScript 类型定义
2026-02-04 03:32:46 +08:00

251 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Go Desk 更新升级功能设计
> **文档版本**v0.1.0
> **创建时间**2026-01-20
> **维护者**JueChen
> **状态**:设计阶段
## 1. 功能概述
实现应用的自动更新升级功能,包括版本检查、下载更新包、自动替换和重启应用。
## 2. 功能需求
### 2.1 核心功能
- [ ] 版本检查:启动时或手动检查最新版本
- [ ] 版本对比:比较当前版本与最新版本
- [ ] 更新提示:发现新版本时提示用户
- [ ] 下载更新:后台下载更新包(支持进度显示)
- [ ] 自动替换:下载完成后自动替换旧版本
- [ ] 自动重启:替换完成后自动重启应用
### 2.2 版本管理
- **当前版本**:从代码中定义(如 `const Version = "1.0.0"`
- **版本格式**:语义化版本(如 `1.0.0`, `1.0.1`
- **版本检查**从服务器获取最新版本信息JSON 格式)
### 2.3 更新流程
```
应用启动
检查更新(可选,后台进行)
发现新版本?
↓ 是
显示更新提示
用户确认更新
下载更新包(显示进度)
下载完成
关闭当前应用
替换旧版本文件
启动新版本
完成
```
## 3. 技术实现
### 3.1 版本信息结构
```go
type VersionInfo struct {
Version string `json:"version"` // 版本号,如 "1.0.1"
DownloadURL string `json:"download_url"` // 下载地址
ReleaseNotes string `json:"release_notes"` // 更新说明
Size int64 `json:"size"` // 文件大小(字节)
MD5 string `json:"md5"` // 文件 MD5 校验
}
```
### 3.2 版本检查接口
**接口地址**`https://your-server.com/api/version/check`
**请求**
```json
{
"current_version": "1.0.0",
"platform": "windows"
}
```
**响应**
```json
{
"has_update": true,
"latest_version": "1.0.1",
"download_url": "https://your-server.com/releases/go-desk-1.0.1.exe",
"release_notes": "修复了若干问题",
"size": 13765632,
"md5": "abc123..."
}
```
### 3.3 Go 后端实现
#### 3.3.1 版本定义
```go
// app.go 或 version.go
const AppVersion = "1.0.0"
```
#### 3.3.2 更新检查方法
```go
// CheckUpdate 检查更新
func (a *App) CheckUpdate() (map[string]interface{}, error)
```
#### 3.3.3 下载更新方法
```go
// DownloadUpdate 下载更新包
func (a *App) DownloadUpdate(downloadURL string, progressCallback func(int)) error
```
#### 3.3.4 应用更新方法
```go
// ApplyUpdate 应用更新(替换文件并重启)
func (a *App) ApplyUpdate(updateFilePath string) error
```
### 3.4 前端实现
#### 3.4.1 更新检查组件
- 启动时自动检查(可选)
- 手动检查按钮
- 更新提示对话框
- 下载进度显示
#### 3.4.2 界面元素
- 版本号显示
- 更新提示对话框Arco Modal
- 下载进度条Arco Progress
- 更新说明展示
## 4. 实现细节
### 4.1 版本比较
使用语义化版本比较:
- 格式:`主版本号.次版本号.修订号`(如 `1.0.0`
- 比较逻辑:逐级比较版本号
### 4.2 文件下载
- 使用 Go 标准库 `net/http` 下载
- 支持进度回调
- 支持断点续传(可选)
- 下载到临时目录(如 `%TEMP%/go-desk-update.exe`
### 4.3 文件替换Windows
**方案1使用批处理脚本**
1. 下载完成后,生成批处理脚本
2. 脚本内容:等待进程结束 → 替换文件 → 启动新版本 → 删除脚本
3. 启动脚本后退出当前应用
**方案2使用 Go 实现**
1. 创建更新助手程序
2. 主程序退出前启动助手程序
3. 助手程序等待主程序退出后替换文件并重启
### 4.4 错误处理
- 网络错误:提示检查网络连接
- 下载失败:支持重试
- 文件校验失败:重新下载
- 替换失败:提示手动更新
## 5. 文件结构
```
go-desk/
├── internal/
│ └── update/
│ ├── update.go # 更新核心逻辑
│ ├── version.go # 版本管理
│ └── download.go # 下载功能
├── app.go # 添加更新相关方法
└── version.go # 版本常量定义
```
## 6. 配置项
### 6.1 更新服务器配置
```go
const (
UpdateCheckURL = "https://your-server.com/api/version/check"
UpdateInterval = 24 * time.Hour // 检查间隔
)
```
### 6.2 可选配置
- 是否自动检查更新
- 检查更新间隔
- 更新服务器地址
## 7. 安全考虑
1. **HTTPS 连接**:版本检查和下载使用 HTTPS
2. **文件校验**:下载后验证 MD5/SHA256
3. **权限检查**:确保有写入权限
4. **回滚机制**:更新失败时保留旧版本
## 8. 用户体验
1. **非阻塞**:更新检查在后台进行,不阻塞应用启动
2. **可取消**:用户可以选择稍后更新
3. **进度显示**:下载时显示进度条
4. **友好提示**:清晰的更新说明和操作指引
## 9. 开发优先级
### 阶段一:基础功能
- [ ] 版本定义和比较
- [ ] 版本检查接口
- [ ] 简单的更新提示
### 阶段二:下载功能
- [ ] 文件下载实现
- [ ] 进度显示
- [ ] 错误处理
### 阶段三:自动更新
- [ ] 文件替换逻辑
- [ ] 自动重启
- [ ] 完整测试
## 10. 注意事项
1. **Windows 文件锁定**:需要先关闭应用才能替换
2. **权限问题**:确保有写入应用目录的权限
3. **网络超时**:设置合理的超时时间
4. **更新失败处理**:保留旧版本,不破坏现有功能
## 11. 参考实现
- Electron 的 auto-updater 机制
- Wails 社区更新方案
- Go 应用更新最佳实践
---
**下一步**:根据此设计文档开始实现更新功能。