# 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 或 CMD,Linux/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 相关)