这是一个基于Go语言和微服务架构构建的现代化电商系统,以小米商城为原型,采用了完整的微服务设计模式。系统集成了商品管理、订单处理、用户系统、支付集成、权限控制等电商核心功能。
- 🏗️ 微服务架构: 基于 go-micro v4 构建的分布式微服务系统
- 🔍 服务发现: 使用 Consul 进行服务注册、发现和配置管理
- 🔐 权限控制: 基于 RBAC 的细粒度权限管理系统
- 💳 支付集成: 支持支付宝、微信支付等多种支付方式
- 📦 缓存系统: Redis 缓存提升系统性能
- 🖼️ 文件管理: 支持本地存储和阿里云 OSS 对象存储
- 🐳 容器化: Docker Compose 一键部署
- 🎯 高性能: 合理的架构设计和性能优化
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ 用户前台界面 │ │ 管理后台界面 │ │ API接口 │
│ (Frontend) │ │ (Admin Panel) │ │ (API Layer) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │ │
└────────────────────────┼────────────────────────┘
│
┌───────────────────────────────────┐
│ API Gateway │
│ (Gin Web Server) │
└───────────────────────────────────┘
│
┌────────────┴────────────┐
│ Consul │
│ (服务注册与发现) │
└─────────────────────────┘
│
┌─────────────────────────┼─────────────────────────┐
│ │ │
┌───────▼────────┐ ┌─────────▼────────┐ ┌─────────▼────────┐
│ RBAC 微服务 │ │ Captcha 微服务 │ │ Captcha Client │
│ (权限管理) │ │ (验证码服务) │ │ (验证码客户端) │
└────────────────┘ └─────────────────┘ └─────────────────┘
│ │ │
└────────────────────────┼────────────────────────┘
│
┌───────────────────────────────────┐
│ Data Layer │
│ MySQL + Redis + File Storage │
└───────────────────────────────────┘
| 分类 | 技术 | 版本 | 说明 |
|---|---|---|---|
| 语言 | Go | 1.17+ | 主要开发语言 |
| Web框架 | Gin | v1.7.7 | HTTP服务器和路由 |
| 微服务 | go-micro | v4.9.0 | 微服务框架 |
| 服务发现 | Consul | latest | 服务注册发现 |
| 通信协议 | gRPC/Protobuf | - | 微服务间通信 |
| 数据库 | MySQL | 8.0+ | 主数据库 |
| 缓存 | Redis | 6.0+ | 缓存系统 |
| ORM | GORM | v1.22.4 | 数据库ORM |
| 容器化 | Docker/Docker Compose | - | 容器化部署 |
| 支付 | 支付宝/微信支付 | - | 第三方支付 |
xiaomishop/
├── client/ # 客户端应用
│ ├── captcha-client/ # 验证码客户端微服务
│ │ ├── Dockerfile
│ │ ├── go.mod
│ │ ├── main.go
│ │ └── Makefile
│ ├── ginshop/ # 主电商应用
│ │ ├── conf/ # 配置文件
│ │ │ └── app.ini
│ │ ├── controllers/ # 控制器层
│ │ │ ├── admin/ # 后台管理控制器
│ │ │ ├── api/ # API控制器
│ │ │ └── itying/ # 前台业务控制器
│ │ ├── middlewares/ # 中间件
│ │ │ ├── adminAuth.go # 管理员权限中间件
│ │ │ └── userAuth.go # 用户权限中间件
│ │ ├── models/ # 数据模型
│ │ ├── proto/ # gRPC协议定义
│ │ ├── routers/ # 路由配置
│ │ ├── static/ # 静态资源
│ │ ├── templates/ # 模板文件
│ │ └── main.go # 主程序入口
│ └── ginWebApi/ # Web API服务
│ ├── controllers/
│ ├── models/
│ ├── routers/
│ └── main.go
├── server/ # 服务端微服务
│ ├── captcha/ # 验证码微服务
│ │ ├── Dockerfile
│ │ ├── go.mod
│ │ ├── handler/
│ │ ├── proto/
│ │ └── main.go
│ └── rbac/ # 权限管理微服务
│ ├── conf/ # 配置文件
│ │ └── app.ini
│ ├── handler/ # 服务处理器
│ │ ├── rbac.go
│ │ ├── rbacLogin.go
│ │ ├── rbacManager.go
│ │ └── rbacRole.go
│ ├── models/ # 数据模型
│ ├── proto/ # gRPC协议定义
│ └── main.go # 微服务启动文件
└── docker-compose.yml # Docker编排文件
- Go 1.17+
- MySQL 8.0+
- Redis 6.0+
- Docker & Docker Compose
- 克隆项目
git clone https://github.com/your-username/xiaomishop.git
cd xiaomishop- 配置环境
# 修改配置文件
cp client/ginshop/conf/app.ini.example client/ginshop/conf/app.ini
cp server/rbac/conf/app.ini.example server/rbac/conf/app.ini
# 编辑配置文件,修改数据库连接等信息- 使用 Docker Compose 启动
# 启动所有服务
docker-compose up -d
# 查看服务状态
docker-compose ps- 手动编译启动(可选)
# 启动 RBAC 微服务
cd server/rbac
go mod tidy
go run main.go
# 启动验证码微服务
cd server/captcha
go mod tidy
go run main.go
# 启动主应用
cd client/ginshop
go mod tidy
go run main.go- 前台商城: http://localhost:8080
- 后台管理: http://localhost:8080/admin
- API接口: http://localhost:3000
- Consul控制台: http://localhost:8500
- 管理员账号: admin / 123456
app_name = 小米商城
log_level = DEBUG
admin_path = /admin
excludeAuthPath = "/,/welcome,/loginOut"
[mysql]
ip = 127.0.0.1
port = 3306
user = root
password = 123456
database = ginxiaomi
[redis]
ip = localhost
port = 6379
redisEnable = true
[oss]
status = 0 # 0: 本地存储, 1: 阿里云OSSapp_name = rbac
[mysql]
ip = 127.0.0.1
port = 3306
user = root
password = 123456
database = ginxiaomirbac
[consul]
addr = 127.0.0.1:8500- 商品管理: 商品增删改查、分类管理、库存管理
- 订单系统: 订单创建、状态跟踪、订单查询
- 购物车: 添加商品、数量调整、批量操作
- 用户系统: 用户注册登录、个人信息、收货地址
- 支付集成: 支付宝支付、微信支付、支付回调
- RBAC模型: 用户-角色-权限三层模型
- 细粒度控制: URL级别的权限控制
- 动态菜单: 基于权限的菜单动态生成
- 权限中间件: 自动权限检查和拦截
- 缓存系统: Redis缓存热点数据
- 文件上传: 支持图片上传和缩略图生成
- 验证码: 图形验证码防止机器人
- 模板渲染: 支持模板函数和数据绑定
// 用户登录
service RbacLogin {
rpc Login(LoginRequest) returns (LoginResponse)
}
// 角色管理
service RbacRole {
rpc RoleGet(RoleGetRequest) returns (RoleGetResponse)
rpc RoleAdd(RoleAddRequest) returns (RoleAddResponse)
rpc RoleAuth(RoleAuthRequest) returns (RoleAuthResponse)
rpc MiddlewaresAuth(MiddlewaresAuthRequest) returns (MiddlewaresAuthResponse)
}
// 管理员管理
service RbacManager {
rpc ManagerGet(ManagerGetRequest) returns (ManagerGetResponse)
rpc ManagerAdd(ManagerAddRequest) returns (ManagerAddResponse)
}service Captcha {
rpc GenerateCaptcha(GenerateRequest) returns (GenerateResponse)
rpc VerifyCaptcha(VerifyRequest) returns (VerifyResponse)
}GET /- 首页商品展示GET /category:id- 商品分类页面GET /detail- 商品详情页面GET /product/getImgList- 获取商品图片列表
GET /cart- 购物车页面GET /cart/addCart- 添加商品到购物车GET /cart/incCart- 增加商品数量GET /cart/decCart- 减少商品数量GET /cart/delCart- 删除购物车商品
GET /buy/checkout- 订单结算页面POST /buy/doCheckout- 提交订单GET /buy/pay- 支付页面GET /buy/orderPayStatus- 查询支付状态
GET /alipay- 支付宝支付POST /alipayNotify- 支付宝回调GET /wxpay- 微信支付POST /wxpay/notify- 微信支付回调
# 运行测试
go test ./...
# 测试覆盖率
go test -cover ./...
# 基准测试
go test -bench=. ./...# 构建镜像
docker-compose build
# 启动服务
docker-compose up -d
# 查看日志
docker-compose logs -f
# 停止服务
docker-compose down- 环境配置
# 设置环境变量
export GO_ENV=production
export MYSQL_HOST=your-mysql-host
export REDIS_HOST=your-redis-host
export CONSUL_HOST=your-consul-host- 数据库初始化
-- 创建数据库
CREATE DATABASE ginxiaomi CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE DATABASE ginxiaomirbac CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 导入数据表结构
mysql -u root -p ginxiaomi < database/ginxiaomi.sql
mysql -u root -p ginxiaomirbac < database/ginxiaomirbac.sql- 编译和部署
# 编译各个服务
cd server/rbac && go build -o rbac main.go
cd server/captcha && go build -o captcha main.go
cd client/ginshop && go build -o ginshop main.go
# 使用进程管理器启动
pm2 start ecosystem.config.js- Consul: http://localhost:8500/ui
- 应用健康检查: http://localhost:8080/health
- 微服务状态: 通过 Consul 服务注册状态查看
# 查看应用日志
docker-compose logs -f ginshop
# 查看微服务日志
docker-compose logs -f rbac
docker-compose logs -f captcha