a84129330e372648b4e395a6af5423166d789eab
- 所有18套前端模板 + 管理后台共20个HTML文件添加i18n引擎 - 前端JavaScript方案:I18N_LOCALES翻译字典 + data-i18n属性 + t()函数调用 - 语言切换器UI:下拉菜单选择,匹配各模板主题风格 - 语言持久化:localStorage存储 + URL参数覆盖 + 浏览器语言自动检测 - onLangChange回调:语言切换时动态重新渲染所有内容 - 支持语言:zh-CN(简体中文) / zh-TW(繁体中文) / en(English)
Gotest 多站点管理系统
基于 Go + Gin + GORM + SQLite 的全栈多站点管理系统,内置 18 套前端网站模板 + 管理后台,覆盖企业官网、跨境电商、外卖平台、游戏平台、应用商店、音乐平台六大业务线。
功能特性
- 18 套前端网站模板:6 大业务线 × 3 种设计风格,通过
//go:embed内嵌到二进制 - 管理后台:完整的 Dashboard + 用户管理 + 16 张数据表的通用 CRUD
- 生产级架构:RequestID 追踪、结构化日志、优雅关机、连接池优化
- 安全认证:JWT Bearer Token + bcrypt 密码哈希 + 管理员权限校验
- 限流防护:基于 IP 的令牌桶限流(golang.org/x/time/rate)
- 定时任务:cron 调度器,支持数据清理等周期性任务
- 文件存储:本地 / MinIO / 腾讯云 COS 三种存储后端
- 短信服务:Mock / 阿里云 / 腾讯云三种短信提供商
- 容器化部署:多阶段 Docker 构建 + docker-compose 一键部署
技术栈
| 组件 | 技术 | 版本 |
|---|---|---|
| Web 框架 | Gin | v1.12.0 |
| ORM | GORM | v1.31.2 |
| 数据库 | SQLite (纯Go驱动) / MySQL | - |
| 认证 | golang-jwt/jwt | v5 |
| 密码哈希 | golang.org/x/crypto/bcrypt | - |
| 配置管理 | gopkg.in/yaml.v3 | - |
| 限流 | golang.org/x/time/rate | - |
| 定时任务 | robfig/cron | v3 |
| Go 版本 | - | 1.25.0 |
项目结构
gotest/
├── main.go # 程序入口
├── config.yaml # 全局配置文件
├── go.mod / go.sum # Go 模块定义
├── Makefile # 标准化构建命令
├── Dockerfile # 多阶段 Docker 构建
├── docker-compose.yml # 容器编排
├── build.bat / build.sh # 跨平台构建脚本
│
├── internal/ # 核心业务代码
│ ├── config/ # 配置结构体定义
│ │ └── config.go # Config 结构体 + Load() 函数
│ │
│ ├── database/ # 数据库初始化
│ │ ├── database.go # Init() + AutoMigrate + HealthCheck
│ │ ├── seed_enterprise.go # 企业模块种子数据
│ │ ├── seed_shop.go # 电商模块种子数据
│ │ ├── seed_food.go # 外卖模块种子数据
│ │ ├── seed_game.go # 游戏模块种子数据
│ │ ├── seed_app.go # 应用模块种子数据
│ │ └── seed_music.go # 音乐模块种子数据
│ │
│ ├── model/ # GORM 数据模型 (17个模型)
│ │ ├── user.go # 用户模型 (User)
│ │ ├── config.go # 系统配置 (Config)
│ │ ├── enterprise.go # 企业模型 (Company/News/Service/Team)
│ │ ├── shop.go # 电商模型 (Product/ProductCategory)
│ │ ├── food.go # 外卖模型 (Restaurant/MenuCategory/MenuItem)
│ │ ├── game.go # 游戏模型 (Game/GameCategory)
│ │ ├── app.go # 应用模型 (App/AppCategory)
│ │ └── music.go # 音乐模型 (Song/MusicCategory)
│ │
│ ├── repository/ # 数据访问层
│ │ ├── user.go # 用户 CRUD
│ │ ├── enterprise.go # 企业数据查询
│ │ ├── shop.go # 电商数据查询
│ │ ├── food.go # 外卖数据查询
│ │ ├── game.go # 游戏数据查询
│ │ ├── app.go # 应用数据查询
│ │ └── music.go # 音乐数据查询
│ │
│ ├── service/ # 业务逻辑层
│ │ ├── auth.go # 认证服务 (登录/JWT生成)
│ │ ├── admin.go # 管理员服务
│ │ ├── user.go # 用户服务
│ │ ├── upload.go # 文件上传服务
│ │ ├── enterprise.go # 企业业务逻辑
│ │ ├── shop.go # 电商业务逻辑
│ │ ├── food.go # 外卖业务逻辑
│ │ ├── game.go # 游戏业务逻辑
│ │ ├── app.go # 应用业务逻辑
│ │ └── music.go # 音乐业务逻辑
│ │
│ ├── handler/ # HTTP 处理器
│ │ ├── response.go # 统一响应格式 (Success/Fail*)
│ │ ├── auth.go # 登录接口
│ │ ├── admin.go # 管理员初始化
│ │ ├── user.go # 用户资料 + 用户CRUD
│ │ ├── upload.go # 文件上传
│ │ ├── dashboard.go # 管理后台仪表盘 + 通用CRUD
│ │ ├── enterprise.go # 企业数据 API
│ │ ├── shop.go # 电商数据 API
│ │ ├── food.go # 外卖数据 API
│ │ ├── game.go # 游戏数据 API
│ │ ├── app.go # 应用数据 API
│ │ └── music.go # 音乐数据 API
│ │
│ ├── middleware/ # 中间件
│ │ ├── request_id.go # 请求ID追踪
│ │ ├── recover.go # Panic 恢复
│ │ ├── logger.go # 结构化日志
│ │ ├── cors.go # 跨域处理
│ │ ├── ratelimit.go # 限流 (令牌桶)
│ │ └── jwt.go # JWT 认证
│ │
│ ├── router/ # 路由注册
│ │ └── router.go # 全局路由 + 中间件链
│ │
│ ├── storage/ # 文件存储抽象
│ │ ├── storage.go # 接口定义 + 工厂函数
│ │ ├── local.go # 本地存储
│ │ ├── minio.go # MinIO 对象存储
│ │ └── cos.go # 腾讯云 COS
│ │
│ ├── sms/ # 短信服务抽象
│ │ ├── sms.go # 接口定义 + 工厂函数
│ │ ├── mock.go # Mock 短信
│ │ ├── aliyun.go # 阿里云短信
│ │ └── tencent.go # 腾讯云短信
│ │
│ └── task/ # 定时任务
│ └── task.go # cron 调度器
│
└── web/dist/ # 嵌入式前端模板
├── admin/index.html # 管理后台 SPA
├── site1/index.html # 企业官网 - 科技风格
├── site2/index.html # 企业官网 - 制造风格
├── site3/index.html # 企业官网 - 咨询风格
├── shop/index.html # 跨境电商 - 红色风格
├── shop2/index.html # 跨境电商 - 暗黑风格
├── shop3/index.html # 跨境电商 - 北欧风格
├── food1/index.html # 外卖平台 - 橙黄风格
├── food2/index.html # 外卖平台 - 深色风格
├── food3/index.html # 外卖平台 - 清新风格
├── game1/index.html # 游戏平台 - 赛博风格
├── game2/index.html # 游戏平台 - 像素风格
├── game3/index.html # 游戏平台 - 云游风格
├── app1/index.html # 应用商店 - 极简风格
├── app2/index.html # 应用商店 - 暗黑风格
├── app3/index.html # 应用商店 - 清新风格
├── music1/index.html # 音乐平台 - 暗黑风格
├── music2/index.html # 音乐平台 - 黑胶风格
├── music3/index.html # 音乐平台 - 渐变风格
└── shared/.gitkeep # 共享资源目录
快速开始
环境要求
- Go 1.21+
- (可选) Docker & Docker Compose
方式一:本地编译运行
# 克隆仓库
git clone https://gitee.com/asdxzaaaaa/gotest.git
cd gotest
# 安装依赖
go mod tidy
# 编译
go build -o build/gotest .
# 运行(自动创建 SQLite 数据库 + 种子数据)
./build/gotest
方式二:Docker 部署
# 使用 docker-compose 一键启动
docker-compose up -d
# 或手动构建镜像
docker build -t gotest .
docker run -d -p 8080:8080 -v $(pwd)/data:/app/data gotest
方式三:使用 Makefile
make build # 编译
make run # 直接运行
make build-prod # 生产级编译
make lint # 代码检查 (fmt + vet)
make test # 运行测试
make docker-up # Docker Compose 启动
make clean # 清理构建产物
网站访问方式
启动服务后,在浏览器中打开以下地址:
管理后台
| 页面 | 地址 | 说明 |
|---|---|---|
| 管理后台 | http://localhost:8080/admin | 默认账号: admin / admin123 |
管理后台功能:
- 仪表盘:用户数 + 6 大业务线数据统计概览
- 用户管理:用户列表、新增/编辑/删除、角色与状态管理
- 内容管理:16 张数据表的通用 CRUD(增删改查)
- 系统设置:服务健康状态、数据库信息、技术栈
- 站点导航:18 套前端模板快速入口
前端网站模板(18 套)
企业官网
| 风格 | 地址 |
|---|---|
| 科技风格 (蓝色) | http://localhost:8080/site1 |
| 制造风格 | http://localhost:8080/site2 |
| 咨询风格 | http://localhost:8080/site3 |
跨境电商
| 风格 | 地址 |
|---|---|
| 红色风格 | http://localhost:8080/shop |
| 暗黑风格 | http://localhost:8080/shop2 |
| 北欧风格 | http://localhost:8080/shop3 |
外卖平台
| 风格 | 地址 |
|---|---|
| 橙黄风格 | http://localhost:8080/food1 |
| 深色风格 | http://localhost:8080/food2 |
| 清新风格 | http://localhost:8080/food3 |
游戏平台
| 风格 | 地址 |
|---|---|
| 赛博风格 | http://localhost:8080/game1 |
| 像素风格 | http://localhost:8080/game2 |
| 云游风格 | http://localhost:8080/game3 |
应用商店
| 风格 | 地址 |
|---|---|
| 极简风格 | http://localhost:8080/app1 |
| 暗黑风格 | http://localhost:8080/app2 |
| 清新风格 | http://localhost:8080/app3 |
音乐平台
| 风格 | 地址 |
|---|---|
| 暗黑风格 | http://localhost:8080/music1 |
| 黑胶风格 | http://localhost:8080/music2 |
| 渐变风格 | http://localhost:8080/music3 |
API 接口
所有 API 以 /api/v1 为前缀,响应格式统一为:
{
"code": 0,
"message": "success",
"data": {}
}
公开接口(无需认证)
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/health | 健康检查(含数据库状态) |
| POST | /api/v1/auth/login | 用户登录 |
| GET | /api/v1/admin/check | 检查管理员是否存在 |
| POST | /api/v1/admin/init | 初始化管理员账号 |
| GET | /api/v1/enterprise/* | 企业数据(公司/服务/新闻/团队) |
| GET | /api/v1/shop/* | 电商数据(分类/商品/推荐) |
| GET | /api/v1/food/* | 外卖数据(餐厅/菜品/菜单) |
| GET | /api/v1/game/* | 游戏数据(分类/游戏/热门/新游) |
| GET | /api/v1/app/* | 应用数据(分类/应用/精选/新上架) |
| GET | /api/v1/music/* | 音乐数据(分类/歌曲/热门/新歌) |
需登录接口(JWT 认证)
| 方法 | 路径 | 说明 |
|---|---|---|
| GET/PUT | /api/v1/user/profile | 获取/更新个人资料 |
| PUT | /api/v1/user/password | 修改密码 |
| POST | /api/v1/upload | 文件上传 |
管理端接口(JWT + 管理员权限)
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/v1/admin/users | 用户列表(分页) |
| POST | /api/v1/admin/users | 创建用户 |
| PUT | /api/v1/admin/users/:id | 更新用户 |
| DELETE | /api/v1/admin/users/:id | 删除用户 |
| GET | /api/v1/admin/dashboard/stats | 仪表盘统计 |
| GET | /api/v1/admin/dashboard/:table | 通用列表查询 |
| POST | /api/v1/admin/dashboard/:table | 通用创建 |
| PUT | /api/v1/admin/dashboard/:table/:id | 通用更新 |
| DELETE | /api/v1/admin/dashboard/:table/:id | 通用删除 |
可管理的数据表
| 模块 | 表名 | 说明 |
|---|---|---|
| 企业官网 | enterprise_company | 企业信息 |
| 企业官网 | enterprise_news | 企业新闻 |
| 企业官网 | enterprise_services | 企业服务 |
| 企业官网 | enterprise_team | 团队成员 |
| 跨境电商 | shop_products | 商品管理 |
| 跨境电商 | shop_categories | 商品分类 |
| 外卖平台 | food_restaurants | 餐厅管理 |
| 外卖平台 | food_categories | 餐厅分类 |
| 外卖平台 | food_menu_items | 菜品管理 |
| 外卖平台 | food_menu_categories | 菜品分类 |
| 游戏平台 | game_games | 游戏管理 |
| 游戏平台 | game_categories | 游戏分类 |
| 应用商店 | app_apps | 应用管理 |
| 应用商店 | app_categories | 应用分类 |
| 音乐平台 | music_songs | 歌曲管理 |
| 音乐平台 | music_categories | 音乐分类 |
配置说明
编辑 config.yaml 进行配置:
server:
port: 8080 # 服务端口
read_timeout: 15 # 读超时(秒)
write_timeout: 30 # 写超时(秒)
idle_timeout: 120 # 空闲超时(秒)
shutdown_timeout: 15 # 优雅关机等待(秒)
database:
driver: sqlite # sqlite | mysql
sqlite:
path: ./data/app.db
mysql:
host: localhost
port: 3306
dbname: gotest
username: root
password: ""
auto_migrate: true # 自动建表
init_data: true # 初始化种子数据
jwt:
secret: change-me-in-production # JWT 密钥
expire_hours: 720 # Token 过期时间(小时)
upload:
path: ./uploads # 上传目录
max_size: 10485760 # 最大文件大小(10MB)
rate_limit:
enabled: true
rps: 10 # 每秒请求数
burst: 20 # 突发大小
env:
name: dev # dev | prod
默认账号
首次启动时自动创建管理员账号:
| 用户名 | 密码 | 角色 |
|---|---|---|
| admin | admin123 | 管理员 |
中间件链
请求处理顺序:
请求 → RequestID → Recover → Logger → CORS → RateLimit → [JWTAuth] → [requireAdmin] → Handler
生产部署建议
- 修改
config.yaml中的 JWT secret - 切换数据库为 MySQL
- 设置
env.name: prod - 使用 Docker 部署或 Nginx 反向代理
- 配置 HTTPS 证书
- 定期备份
data/目录
许可证
MIT License
Description
Languages
Go
98.4%
Makefile
0.9%
Dockerfile
0.6%