Files
QWQLwToo 079ee4eaeb
build-winui / winui (push) Has been cancelled
Add server components
2026-06-26 13:28:09 +08:00

583 lines
12 KiB
Markdown
Raw Permalink 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.
# YMhut更新站 - Go 版本
这是 Node.js 版本的完整 Go 实现,使用 Gin 框架构建,提供了更好的性能和更完善的 UI/UX 体验。
## 功能特性
- ✅ 完整复现 Node.js 版本的所有功能
- ✅ 产品列表展示(自动从 downloads 目录读取)
- ✅ JSON API 接口(tool-status.json, update-info.json, media-types.json 等)
- ✅ 文件下载功能(支持安全校验)
- ✅ 历史版本查看
- ✅ 改进的 UI/UX(增强动画、优化响应式设计)
- ✅ 完整的错误处理(404、500 页面)
- ✅ 彩色日志系统
-**后台管理系统**(新增)
- 用户注册和登录(第一个用户自动成为管理员)
- 密码强度验证(防止弱密码)
- 路由管理(可视化添加、编辑、删除路由)
- 文件管理(浏览、查看、编辑文件)
- 配置管理(编辑 JSON 配置文件)
- 日志查看(实时查看系统日志)
- 系统信息(查看系统统计)
## 项目结构
```
go/
├── main.go # 主入口文件
├── go.mod # Go 模块依赖
├── go.sum # 依赖校验文件
├── config/
│ └── routes.go # 路由配置
├── models/ # 数据模型
│ ├── user.go # 用户模型
│ └── route.go # 路由模型
├── database/ # 数据库
│ └── db.go # 数据库初始化
├── handlers/ # 请求处理
│ ├── auth.go # 认证处理
│ └── admin.go # 后台管理处理
├── middleware/ # 中间件
│ └── auth.go # 认证中间件
├── utils/
│ ├── logger.go # 日志工具
│ ├── route-utils.go # 路由辅助函数
│ ├── password.go # 密码验证
│ ├── jwt.go # JWT Token
│ └── config.go # 配置缓存
├── views/ # HTML 模板
│ ├── index.html
│ ├── admin.html # 后台管理界面
│ ├── 404.html
│ └── 500.html
└── public/ # 静态资源
├── css/
├── img/
├── fonts/
├── lang/
├── downloads/ # 下载文件目录
└── *.json # JSON 配置文件
```
## 前置要求
### 必需
- **Go 1.21 或更高版本**
- 下载地址:https://golang.org/dl/
- 安装后验证:`go version`
### 可选(用于编译)
- **Git**(用于版本控制)
- **CGO**SQLite 需要,Windows 可能需要安装 GCC
## 快速开始
**新手推荐**:查看 [QUICKSTART.md](./QUICKSTART.md) 获取详细的、一步一步的安装指南。
## 完整安装步骤
### 步骤 1: 检查 Go 环境
打开终端(Windows: PowerShell 或 CMDLinux/macOS: Terminal),运行:
```bash
go version
```
**预期输出示例:**
```
go version go1.21.0 windows/amd64
```
如果显示 "command not found" 或类似错误,请先安装 Go。
### 步骤 2: 进入项目目录
```bash
# Windows (PowerShell)
cd D:\Desktop\update\go
# Windows (CMD)
cd D:\Desktop\update\go
# Linux/macOS
cd /path/to/update/go
```
### 步骤 3: 下载依赖
```bash
go mod download
```
**预期输出:**
```
go: downloading github.com/gin-gonic/gin v1.9.1
go: downloading github.com/golang-jwt/jwt/v5 v5.2.0
go: downloading gorm.io/gorm v1.25.5
...
```
### 步骤 4: 整理依赖(生成 go.sum)
```bash
go mod tidy
```
**预期输出:**
```
go: downloading github.com/mattn/go-sqlite3 v1.14.17
go: downloading github.com/jinzhu/now v1.1.5
...
```
这个命令会:
- 下载所有缺失的依赖
- 移除未使用的依赖
- 生成/更新 `go.sum` 文件
### 步骤 5: 验证依赖
```bash
go mod verify
```
**预期输出:**
```
all modules verified
```
### 步骤 6: 测试编译
```bash
# Windows
go build -o software-download-center.exe .
# Linux/macOS
go build -o software-download-center .
```
**预期输出:**
- 无错误信息
- 生成可执行文件
### 步骤 7: 运行项目
```bash
# Windows
go run main.go
# 或使用编译后的文件
.\software-download-center.exe
# Linux/macOS
go run main.go
# 或使用编译后的文件
./software-download-center
```
**预期输出:**
```
=============================================
✅ 数据库初始化成功
✅ 配置缓存初始化成功
=============================================
📋 开始注册路由...
✅ 路由注册成功 [GET ] / (类型: view)
...
📋 路由注册完成!
=============================================
✅ 服务器启动成功
📡 访问地址: http://localhost:3355
🌍 当前环境: production
🔄 兼容旧版访问:支持 /tool-status.json /update-info.json /media-types.json
=============================================
```
### 步骤 8: 访问应用
1. **主页**http://localhost:3355
2. **后台管理**http://localhost:3355/admin
## 开发模式运行
### 启用调试模式
```bash
# Windows (PowerShell)
$env:GIN_MODE="debug"; go run main.go
# Windows (CMD)
set GIN_MODE=debug && go run main.go
# Linux/macOS
GIN_MODE=debug go run main.go
```
### 自定义端口
```bash
# Windows (PowerShell)
$env:PORT="8080"; go run main.go
# Windows (CMD)
set PORT=8080 && go run main.go
# Linux/macOS
PORT=8080 go run main.go
```
## 编译打包
### 方法 1: 使用打包脚本(推荐)
#### Windows
```bash
# 运行批处理脚本
build.bat
```
#### Linux/macOS
```bash
# 添加执行权限
chmod +x build.sh
# 运行脚本
./build.sh
```
编译后的文件位于 `build/output/` 目录。
### 方法 2: 手动编译
#### 编译当前平台版本
```bash
# Windows
go build -ldflags="-s -w" -o software-download-center.exe .
# Linux
go build -ldflags="-s -w" -o software-download-center .
# macOS
go build -ldflags="-s -w" -o software-download-center .
```
#### 交叉编译(在其他平台编译)
```bash
# 在 Windows 上编译 Linux 版本
set GOOS=linux
set GOARCH=amd64
go build -ldflags="-s -w" -o software-download-center .
# 在 Linux/macOS 上编译 Windows 版本
GOOS=windows GOARCH=amd64 go build -ldflags="-s -w" -o software-download-center.exe .
# 在 Linux/macOS 上编译 macOS 版本(Apple Silicon
GOOS=darwin GOARCH=arm64 go build -ldflags="-s -w" -o software-download-center .
```
**编译参数说明:**
- `-ldflags="-s -w"`:减小可执行文件大小
- `-s`:去除符号表
- `-w`:去除调试信息
### 方法 3: 静态编译(无 CGO 依赖)
```bash
# Windows
set CGO_ENABLED=0
set GOOS=windows
set GOARCH=amd64
go build -ldflags="-s -w" -o software-download-center.exe .
# Linux
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" -o software-download-center .
# macOS
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -ldflags="-s -w" -o software-download-center .
```
**注意:** 静态编译时 SQLite 可能无法使用,需要 CGO 支持。
## 配置说明
### 环境变量
| 变量名 | 说明 | 默认值 |
|--------|------|--------|
| `PORT` | 服务器端口 | `3355` |
| `GIN_MODE` | Gin 运行模式 | `release` |
| `CGO_ENABLED` | 是否启用 CGO | `1` |
### 文件命名规则
下载文件需要遵循以下命名格式才能被正确识别:
```
产品名称 Setup 版本号.扩展名
```
**示例:**
- `YmhutBox Setup 1.4.21.exe`
- `弈鸣小筑 Setup 2.0.0.zip`
**支持的扩展名:** `.exe`, `.zip`, `.pkg`, `.dmg`, `.msi`
## 后台管理
### 访问地址
http://localhost:3355/admin
### 首次使用
1. 访问后台管理页面
2. 点击"注册"标签
3. 填写注册信息(第一个注册的用户自动成为管理员)
4. 登录后即可使用所有管理功能
### 密码要求
- 至少 8 个字符
- 包含至少一个大写字母
- 包含至少一个小写字母
- 包含至少一个数字
- 包含至少一个特殊字符
- 不能是常见弱密码
详细使用说明请查看 [ADMIN.md](./ADMIN.md)。
## UI/UX 改进
相比 Node.js 版本,Go 版本在 UI/UX 方面做了以下改进:
1. **增强的动画效果**
- 更流畅的卡片入场动画
- 改进的悬停效果(轻微上浮)
- 优化的按钮交互反馈
2. **改进的滚动条**
- 更宽的滚动条(10px
- 圆角设计
- 平滑的过渡效果
3. **无障碍改进**
- 支持 `prefers-reduced-motion` 媒体查询
- 增强的焦点可见性
- 更好的键盘导航支持
4. **性能优化**
- Go 的高性能并发处理
- 更快的响应时间
- 更低的内存占用
## API 接口
### JSON 接口
- `GET /tool-status.json` - 工具状态配置
- `GET /update-info.json` - 更新信息
- `GET /media-types.json` - 媒体类型配置
- `GET /plugins.json` - 插件配置
所有接口都支持不带 `.json` 后缀的访问方式(向后兼容)。
### 文件下载
- `GET /downloads/:filename` - 下载指定文件
### 静态资源
- `/css/*` - CSS 样式文件
- `/img/*` - 图片资源
- `/fonts/*` - 字体文件
- `/lang/*` - 语言文件
### 后台管理 API
详细 API 文档请查看 [ADMIN.md](./ADMIN.md)。
## 常见问题
### 1. 编译错误:missing go.sum entry
**解决方法:**
```bash
go mod tidy
```
### 2. 运行时错误:数据库初始化失败
**可能原因:**
- `data` 目录权限不足
- 磁盘空间不足
**解决方法:**
- 检查目录权限
- 确保有足够的磁盘空间
- 手动创建 `data` 目录
### 3. 端口被占用
**解决方法:**
```bash
# 使用其他端口
PORT=8080 go run main.go
```
### 4. SQLite 相关错误(CGO 问题)
**错误信息:**
```
SQLite 连接失败: Binary was compiled with 'CGO_ENABLED=0', go-sqlite3 requires cgo to work
```
**可能原因:**
- 缺少 CGO 支持
- 缺少 GCC 编译器
- 编译时禁用了 CGO
**解决方法:**
**方案 1: 启用 CGO 重新编译**
```bash
# Windows (PowerShell)
$env:CGO_ENABLED="1"
go build -o software-download-center.exe .
# Linux/macOS
export CGO_ENABLED=1
go build -o software-download-center .
```
**方案 2: 使用 MySQL(无需 CGO**
```bash
# Windows (PowerShell)
$env:DB_TYPE="mysql"
$env:DB_HOST="localhost"
$env:DB_USER="root"
$env:DB_PASSWORD="password"
$env:DB_NAME="software_download_center"
go run main.go
# Linux/macOS
export DB_TYPE=mysql
export DB_HOST=localhost
export DB_USER=root
export DB_PASSWORD=password
export DB_NAME=software_download_center
go run main.go
```
详细说明请查看 [CGO_FIX.md](./CGO_FIX.md)。
### 5. 依赖下载失败
**解决方法:**
```bash
# 设置 Go 代理(中国大陆)
go env -w GOPROXY=https://goproxy.cn,direct
# 或使用官方代理
go env -w GOPROXY=https://proxy.golang.org,direct
```
## 开发说明
### 添加新路由
`config/routes.go` 中的 `RegisterRoutes` 函数中添加新路由。
### 修改模板
模板文件位于 `views/` 目录,使用 Go 的 `html/template` 语法。
### 添加新的工具函数
`utils/` 目录下创建新的工具文件。
### 数据库迁移
数据库使用 GORM 自动迁移,启动时会自动创建表结构。
## 部署说明
### 生产环境部署
1. **编译可执行文件**
```bash
go build -ldflags="-s -w" -o software-download-center .
```
2. **复制必要文件**
```bash
# 复制静态资源
cp -r public output/
cp -r views output/
```
3. **运行服务**
```bash
PORT=3355 ./software-download-center
```
### 使用进程管理器
详细部署说明请查看 [BUILD.md](./BUILD.md)。
## 与 Node.js 版本的差异
1. **性能**: Go 版本具有更好的并发性能和更低的内存占用
2. **部署**: Go 版本编译为单个可执行文件,部署更简单
3. **UI**: Go 版本包含了一些 UI/UX 改进
4. **功能**: 功能完全一致,100% 兼容
5. **后台管理**: Go 版本新增了完整的后台管理系统
## 快速开始(完整流程)
```bash
# 1. 检查 Go 版本
go version
# 2. 进入项目目录
cd go
# 3. 下载依赖
go mod download
# 4. 整理依赖
go mod tidy
# 5. 验证依赖
go mod verify
# 6. 运行项目
go run main.go
# 7. 访问应用
# 浏览器打开: http://localhost:3355
```
## 许可证
MIT License
## 作者
YMhut
## 相关文档
- [QUICKSTART.md](./QUICKSTART.md) - 快速开始指南(推荐新手)
- [ADMIN.md](./ADMIN.md) - 后台管理系统使用说明
- [BUILD.md](./BUILD.md) - 打包编译详细说明
- [CGO_FIX.md](./CGO_FIX.md) - CGO 问题解决方案(SQLite 相关)