GoMall 是一个企业级的全栈电商项目,包含完整的前后端实现和系统性的 Go 语言学习文档。项目不仅是一个功能完整的商城系统,更是一个从入门到精通的 Go 语言学习平台。
- 🏗️ 企业级架构:采用微服务架构思想,代码结构清晰,易于维护和扩展
- 📚 完整学习体系:包含 14 章系统性 Go 语言学习文档,从基础到高级全覆盖
- 🎯 实战导向:结合真实商城项目,理论与实践完美结合
- 🔧 现代化技术栈:使用最新的 Go 生态和前端技术
- 🧪 完善测试:包含单元测试、集成测试、前端测试框架
- 📦 容器化部署:支持 Docker 和 Kubernetes 部署
- 📊 监控运维:集成监控、日志、性能分析等生产级功能
- Go 语言初学者:通过系统性文档和实战项目快速入门
- 有经验的开发者:学习企业级 Go 项目架构和最佳实践
- 全栈开发者:了解现代化前后端分离架构
- 面试准备者:包含大量面试常考点和标准答案
- 配置管理: Viper - 配置解决方案
- 日志: Zap - 高性能日志库
- 认证: JWT - JSON Web Token
- 权限: Casbin - 权限管理
- 验证: Validator - 数据验证
- API 文档: Swagger - API 文档生成
- 数值计算: Decimal - 精确数值计算
- 消息队列: RabbitMQ/Kafka - 异步消息处理
- 监控: Prometheus + Grafana - 指标监控和可视化
- 链路追踪: Jaeger/OpenTelemetry - 分布式链路追踪
- 容器化: Docker + Kubernetes - 容器化部署
- CI/CD: GitHub Actions - 自动化构建部署
- 框架: React 18 + TypeScript - 现代化前端框架
- 构建工具: Next.js 14 - 全栈 React 框架
- 状态管理: Redux Toolkit - 状态管理
- UI 组件: Tailwind CSS - 原子化 CSS 框架
- HTTP 客户端: Axios - HTTP 请求库
- 测试框架: Jest + React Testing Library - 前端测试
- 版本控制: Git + GitHub - 代码版本管理
- API 测试: Postman/Insomnia - API 接口测试
- 数据库管理: MySQL Workbench/DBeaver - 数据库管理工具
- 代码编辑器: VS Code/GoLand - 开发环境
go-mall/
├── 📚 trial/ # Go语言学习文档系列
│ ├── 01-basics/ # 基础篇(4章)
│ │ ├── 01-variables-and-types.md # 变量类型与基本语法
│ │ ├── 02-control-structures.md # 控制结构与流程控制
│ │ ├── 03-functions-and-methods.md # 函数方法与包管理
│ │ └── 04-packages-and-imports.md # 包管理与模块化
│ ├── 02-advanced/ # 进阶篇(4章)
│ │ ├── 01-structs-and-interfaces.md # 结构体与接口
│ │ ├── 02-error-handling.md # 错误处理与异常管理
│ │ ├── 03-concurrency-basics.md # 并发编程与goroutine
│ │ └── 04-interface-design-patterns.md # 接口设计与多态
│ ├── 03-practical/ # 实战篇(4章)
│ │ ├── 01-gin-framework-basics.md # Gin框架入门与实践
│ │ ├── 02-gorm-database-operations.md # GORM数据库操作
│ │ ├── 03-redis-cache-applications.md # Redis缓存应用
│ │ └── 04-message-queue-integration.md # 消息队列集成
│ ├── 04-architecture/ # 架构篇(1章)
│ │ └── 01-microservices-design.md # 微服务架构设计
│ ├── 05-advanced/ # 高级篇(1章)
│ │ └── 01-production-practices.md # 生产实践与运维
│ └── README.md # 学习路径指南
├── 🖥️ mall-go/ # Go后端项目
│ ├── cmd/ # 应用入口
│ │ └── server/main.go
│ ├── internal/ # 内部包
│ │ ├── config/ # 配置管理
│ │ ├── handler/ # HTTP处理器
│ │ │ ├── user/ # 用户相关接口
│ │ │ ├── product/ # 商品相关接口
│ │ │ ├── order/ # 订单相关接口
│ │ │ └── cart/ # 购物车相关接口
│ │ ├── service/ # 业务逻辑层
│ │ ├── repository/ # 数据访问层
│ │ ├── model/ # 数据模型
│ │ ├── middleware/ # 中间件
│ │ └── utils/ # 工具函数
│ ├── pkg/ # 可导出的包
│ │ ├── auth/ # 认证相关
│ │ ├── database/ # 数据库连接
│ │ ├── cache/ # 缓存管理
│ │ ├── payment/ # 支付集成
│ │ └── response/ # 响应封装
│ ├── configs/ # 配置文件
│ ├── tests/ # 测试文件
│ │ ├── handler/ # 接口测试
│ │ ├── integration/ # 集成测试
│ │ └── helpers/ # 测试辅助
│ ├── scripts/ # 脚本文件
│ ├── go.mod
│ └── go.sum
├── 🌐 mall-frontend/ # React前端项目
│ ├── src/
│ │ ├── app/ # Next.js页面
│ │ │ ├── login/ # 登录页面
│ │ │ ├── register/ # 注册页面
│ │ │ ├── products/ # 商品页面
│ │ │ ├── cart/ # 购物车页面
│ │ │ └── orders/ # 订单页面
│ │ ├── components/ # React组件
│ │ │ ├── business/ # 业务组件
│ │ │ ├── layout/ # 布局组件
│ │ │ └── __tests__/ # 组件测试
│ │ ├── store/ # Redux状态管理
│ │ ├── utils/ # 工具函数
│ │ └── types/ # TypeScript类型定义
│ ├── public/ # 静态资源
│ ├── package.json
│ └── next.config.js
├── 📋 docs/ # 项目文档
│ ├── api/ # API文档
│ ├── deployment/ # 部署文档
│ └── testing/ # 测试文档
├── 🔧 scripts/ # 项目脚本
│ ├── quick-start.sh # 快速启动脚本
│ ├── run-tests.sh # 测试运行脚本
│ └── deploy.sh # 部署脚本
├── 🐳 docker-compose.yml # Docker编排文件
├── 📄 README.md # 项目说明文档
└── 📜 LICENSE # 开源许可证
本项目包含完整的 Go 语言学习文档系列,共 14 章节,从基础到高级全面覆盖:
- 结构体与接口 - 面向对象编程
- 错误处理与异常管理 - Go 错误处理最佳实践
- 并发编程与 goroutine - Go 并发编程核心
- 接口设计与多态 - 高级接口设计模式
- Gin 框架入门与实践 - Web 开发框架
- GORM 数据库操作 - 数据库 ORM 实践
- Redis 缓存应用 - 缓存系统集成
- 消息队列集成 - 异步消息处理
- 微服务架构设计 - 分布式系统架构
- 生产实践与运维 - 容器化部署、监控运维
- 📖 系统性:从基础到高级,循序渐进的学习路径
- 🎯 实战性:结合 mall-go 项目的真实应用场景
- 🔍 对比性:与 Java、Python 等语言的详细对比
- 💡 面试导向:包含面试常考点和标准答案
⚠️ 踩坑指南:真实的生产环境问题和解决方案- 🏋️ 练习巩固:每章包含 2-3 道实战练习题
- Go: 1.21+
- MySQL: 8.0+
- Redis: 6.0+ (可选)
- Docker: 20.0+ (可选)
- Node.js: 18+
- npm/yarn: 最新版本
使用我们提供的快速启动脚本:
# 克隆项目
git clone https://github.com/Akarin-Akari/go-mall.git
cd go-mall
# 一键启动(包含数据库初始化)
chmod +x quick-start.sh
./quick-start.sh# 进入后端目录
cd mall-go
# 安装Go依赖
go mod tidy
# 创建MySQL数据库
mysql -u root -p
CREATE DATABASE mall_go CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# 修改配置文件
cp configs/config.yaml.example configs/config.yaml
# 编辑configs/config.yaml,配置数据库连接信息
# 运行数据库迁移
go run cmd/migrate/main.go
# 启动后端服务
go run cmd/server/main.go# 进入前端目录
cd mall-frontend
# 安装依赖
npm install
# 或使用yarn
yarn install
# 启动开发服务器
npm run dev
# 或使用yarn
yarn dev# 使用Docker Compose一键部署
docker-compose up -d
# 查看服务状态
docker-compose ps
# 查看日志
docker-compose logs -f- 开发环境: http://localhost:3000
- 生产环境: https://your-domain.com
- 开发环境: http://localhost:8081
- API 文档: http://localhost:8081/swagger/index.html
- 健康检查: http://localhost:8081/health
- phpMyAdmin: http://localhost:8081 (Docker 部署时)
- Redis Commander: http://localhost:8082 (Docker 部署时)
启动后端服务后,访问 Swagger 在线文档:
- 地址: http://localhost:8081/swagger/index.html
- 功能: 在线 API 测试、参数说明、响应示例
POST /api/v1/auth/register- 用户注册POST /api/v1/auth/login- 用户登录GET /api/v1/user/profile- 获取用户信息PUT /api/v1/user/profile- 更新用户信息
GET /api/v1/products- 获取商品列表GET /api/v1/products/:id- 获取商品详情POST /api/v1/products- 创建商品(管理员)PUT /api/v1/products/:id- 更新商品(管理员)
GET /api/v1/cart- 获取购物车POST /api/v1/cart/items- 添加商品到购物车PUT /api/v1/cart/items/:id- 更新购物车商品DELETE /api/v1/cart/items/:id- 删除购物车商品
POST /api/v1/orders- 创建订单GET /api/v1/orders- 获取订单列表GET /api/v1/orders/:id- 获取订单详情PUT /api/v1/orders/:id/status- 更新订单状态
- 定义数据模型 - 在
mall-go/internal/model/中定义数据结构
type Product struct {
ID uint `json:"id" gorm:"primaryKey"`
Name string `json:"name" gorm:"not null"`
Price decimal.Decimal `json:"price" gorm:"type:decimal(10,2)"`
Description string `json:"description"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}- 实现数据访问层 - 在
mall-go/internal/repository/中实现数据操作
type ProductRepository interface {
Create(product *model.Product) error
GetByID(id uint) (*model.Product, error)
List(offset, limit int) ([]*model.Product, error)
}- 实现业务逻辑层 - 在
mall-go/internal/service/中实现业务逻辑
type ProductService struct {
repo repository.ProductRepository
}
func (s *ProductService) CreateProduct(req *CreateProductRequest) error {
// 业务逻辑处理
}- 实现 HTTP 处理器 - 在
mall-go/internal/handler/中实现 API 接口
func (h *ProductHandler) CreateProduct(c *gin.Context) {
// HTTP请求处理
}- 注册路由 - 在
mall-go/internal/handler/routes.go中注册路由
v1.POST("/products", productHandler.CreateProduct)# 数据库迁移
go run mall-go/cmd/migrate/main.go
# 初始化测试数据
go run mall-go/scripts/init_test_data.go
# 数据库连接测试
go run mall-go/debug_db_connection.go- 创建页面组件 - 在
mall-frontend/src/app/中创建页面
// mall-frontend/src/app/products/page.tsx
export default function ProductsPage() {
return <div>Products Page</div>;
}- 创建业务组件 - 在
mall-frontend/src/components/business/中创建组件
// mall-frontend/src/components/business/ProductCard.tsx
interface ProductCardProps {
product: Product;
}
export const ProductCard: React.FC<ProductCardProps> = ({ product }) => {
return <div>{product.name}</div>;
};- 状态管理 - 在
mall-frontend/src/store/slices/中管理状态
// mall-frontend/src/store/slices/productSlice.ts
export const productSlice = createSlice({
name: "product",
initialState,
reducers: {
setProducts: (state, action) => {
state.products = action.payload;
},
},
});- API 调用 - 在
mall-frontend/src/utils/中封装 API
// mall-frontend/src/utils/api.ts
export const productAPI = {
getProducts: () => httpClient.get("/api/v1/products"),
getProduct: (id: number) => httpClient.get(`/api/v1/products/${id}`),
};# 运行所有测试
cd mall-go
go test ./...
# 运行特定模块测试
go test ./internal/handler/...
# 运行测试并生成覆盖率报告
go test -coverprofile=coverage.out ./...
go tool cover -html=coverage.out
# 运行集成测试
go test ./tests/integration/...# 运行单元测试
cd mall-frontend
npm test
# 运行测试并生成覆盖率报告
npm run test:coverage
# 运行E2E测试
npm run test:e2e# 使用提供的测试脚本
cd scripts
./run-all-tests.sh
# 手动API测试
cd mall-go
go run test_api.go- 用户注册(邮箱验证)
- 用户登录(JWT 认证)
- 用户信息管理
- 权限控制(RBAC)
- 密码重置
- 用户头像上传
- 登录日志记录
- 商品管理(CRUD)
- 商品分类管理
- 商品图片上传
- 库存管理
- 商品搜索(全文检索)
- 商品推荐算法
- 价格历史记录
- 商品评价系统
- 购物车管理
- 商品数量调整
- 购物车同步(登录用户)
- 购物车持久化
- 批量操作
- 购物车推荐
- 订单创建
- 订单状态管理
- 订单查询(多条件筛选)
- 订单详情
- 订单取消
- 订单退款
- 支付集成(支付宝/微信)
- 物流跟踪
- 支付接口设计
- 支付方式管理
- 支付宝集成
- 微信支付集成
- 支付回调处理
- 支付安全验证
- JWT 认证
- RBAC 权限管理
- 结构化日志记录
- 配置管理(多环境)
- 文件上传(本地/云存储)
- Redis 缓存管理
- 数据库连接池
- API 限流
- 跨域处理
- 健康检查接口
- Prometheus 指标监控
- 链路追踪集成
- 性能分析工具
- 错误日志收集
- 数据库监控
- 缓存监控
- 告警系统
- 自动化部署
- 响应式设计
- 用户认证界面
- 商品展示页面
- 购物车功能
- 订单管理
- 用户中心
- 搜索功能
- 商品筛选
- 图片懒加载
- 无限滚动
- PWA 支持
- 移动端适配优化
# 1. 克隆项目
git clone https://github.com/Akarin-Akari/go-mall.git
cd go-mall
# 2. 配置环境变量
cp .env.example .env
# 编辑.env文件,配置数据库等信息
# 3. 启动所有服务
docker-compose up -d
# 4. 查看服务状态
docker-compose ps
# 5. 查看日志
docker-compose logs -f mall-go# 1. 创建命名空间
kubectl create namespace mall-go
# 2. 应用配置文件
kubectl apply -f k8s/
# 3. 查看部署状态
kubectl get pods -n mall-go
# 4. 查看服务
kubectl get svc -n mall-go详细的传统部署指南请参考:部署文档
- 数据库优化:索引优化、查询优化、连接池配置
- 缓存策略:Redis 缓存、本地缓存、CDN 缓存
- 并发优化:Goroutine 池、连接复用
- 内存优化:对象池、内存复用
- 代码分割:路由懒加载、组件懒加载
- 资源优化:图片压缩、静态资源 CDN
- 缓存策略:浏览器缓存、Service Worker
- 性能监控:Web Vitals、性能分析
- 认证安全:JWT Token、密码加密、登录限制
- 权限控制:RBAC 权限模型、API 权限验证
- 数据安全:SQL 注入防护、XSS 防护、CSRF 防护
- 传输安全:HTTPS 加密、API 签名验证
- 审计日志:操作日志记录、安全事件监控
我们欢迎所有形式的贡献!无论是 bug 修复、功能增强、文档改进还是问题反馈。
- Fork 项目 - 点击右上角 Fork 按钮
- 创建分支 -
git checkout -b feature/AmazingFeature - 提交代码 -
git commit -m 'Add some AmazingFeature' - 推送分支 -
git push origin feature/AmazingFeature - 创建 PR - 打开 Pull Request
- 改进现有文档
- 添加使用示例
- 翻译文档到其他语言
- 修复文档中的错误
- 使用Issue 模板报告 bug
- 提供详细的复现步骤
- 包含相关的日志信息
- 说明你的环境信息
- 在Discussions中讨论新功能
- 提供详细的功能描述
- 说明使用场景和价值
- 代码行数: 70,000+ 行
- 文档字数: 100,000+ 字
- 测试覆盖率: 85%+
- API 接口: 50+ 个
- 学习章节: 14 章
- 支持语言: 中文、英文
感谢所有为这个项目做出贡献的开发者!
- @Akarin-Akari - 项目创建者和主要维护者
- Gin Framework - 高性能 Web 框架
- GORM - 优秀的 Go ORM 库
- React - 现代化前端框架
本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情
如果你在使用过程中遇到任何问题,可以通过以下方式获取帮助:
- GitHub Issues - 问题反馈和 bug 报告
- GitHub Discussions - 功能讨论和经验分享
- 项目 Wiki - 详细的使用指南
- 项目维护者: @Akarin-Akari
- 邮箱: akarinzhang@foxmail.com
如果这个项目对你有帮助,请给我们一个 ⭐️!
🎉 Happy Coding! 让我们一起用 Go 语言构建更美好的世界! 🚀
Made with ❤️ by Akarin-Akari