Skip to content
bumianbumainPublic

About

一些关于GO语言的学习

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

4 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 

Repository files navigation

MyGoShop - 个性化电商系统

基于Golershop开源项目的二次开发学习项目


项目介绍

MyGoShop 是一个基于 Golershop (ShopSuite Go版本) 开源项目进行个性化改造的电商系统。本项目主要目的是学习现代化电商系统的开发架构和技术实现。

特别致谢

本项目基于以下优秀开源项目进行开发和学习:

  • 原项目: Golershop (ShopSuite 开源商城系统 Go版本)
  • 原项目地址: https://github.com/shsuishang/golershop
  • 开发团队: 随商信息技术(上海)有限公司
  • 致谢: 感谢原项目团队提供了功能完整、架构清晰的电商系统基础框架

声明: 本项目仅用于学习和开发实践,遵循原项目的开源协议要求。


项目特色

改造亮点

  1. 技术栈升级: Go 1.24 + GoFrame v2 + Vue3 + MySQL + Redis
  2. 架构优化: 前后端分离,模块化设计
  3. 配置简化: 简化部署配置,易于本地开发
  4. 代码规范: 统一的代码风格和注释规范

功能模块

  • 用户认证与权限管理
  • 商品SKU管理与分类体系
  • 购物车与订单处理
  • 支付系统集成
  • 营销活动(优惠券、秒杀等)
  • 内容管理(文章、分类)
  • 数据统计与分析

学习笔记与改造记录

主要改造内容

1. 项目基础信息

  • 修改模块名和包结构
  • 自定义项目配置常量
  • 更新服务文件头部注释

2. 配置优化

  • 简化本地开发配置
  • 移除复杂的外部依赖
  • 优化数据库连接配置

3. 技术理解

  • 深入理解 GoFrame 框架设计
  • 掌握电商业务逻辑实现
  • 学习高性能API设计

🛠️ 技术栈

后端技术

  • 语言: Go 1.24+
  • 框架: GoFrame v2.9.5
  • 数据库: MySQL 5.7+
  • 缓存: Redis 6.0+
  • 认证: JWT

前端技术

  • 框架: Vue 3 + Element Plus
  • 移动端: UniApp (H5 + 小程序)
  • 构建工具: Vite + Webpack

开发工具

  • 版本控制: Git
  • API测试: Postman
  • 部署: Docker (可选)

快速开始

环境要求

  • Go 1.24+
  • MySQL 5.7+
  • Redis 6.0+

安装步骤

  1. 克隆项目
git clone [your-repo-url]
cd my-goshop
  1. 配置环境
# 安装依赖
go mod tidy

# 创建数据库
mysql -u root -p -e "CREATE DATABASE myshop;"
  1. 修改配置 编辑 config/config.yaml,配置数据库连接信息:
database:
  default:
    link: "mysql:username:password@tcp(localhost:3306)/myshop?parseTime=true&loc=Local"
  1. 启动服务
go run main.go
  1. 访问应用

项目结构

my-goshop/
├── api/                 # API接口定义
├── internal/            # 内部模块
│   ├── cmd/            # 入口命令
│   ├── controller/     # 控制器层
│   ├── service/        # 服务层
│   ├── model/          # 数据模型
│   └── consts/         # 常量定义
├── config/             # 配置文件
├── boot/              # 启动配置
├── manifest/          # 部署配置
└── resource/          # 静态资源

Go vs Java 架构对比

项目结构不同

Go项目: 这个Go电商项目结构很简单直接,就像整理一个整洁的书架:

  • api/ 文件夹放API接口定义,按功能分门别类
  • internal/ 是内部实现,对外不可见,里面有控制器、服务层、数据模型
  • 文件命名很直观,看文件名就知道是干什么的
  • 整体结构扁平,没有复杂的层级嵌套

Java项目(Spring Boot): Java项目结构更像一个大型图书馆:

  • 有严格的包命名规范,比如 com.example.shop.controller
  • 使用注解来标记各个组件,比如 @RestController、@Service
  • 层级更深,每个功能模块都有标准的目录结构
  • 配置文件、静态资源都有固定的位置

简单说,Go更像"即插即用"的积木,Java更像"精密组装"的手表。

技术实现上的差异

Go的做法:

  • 用GoFrame框架,有点像Spring Boot的简化版
  • 数据库操作直接用框架自带的ORM,写起来像写SQL但更安全
  • 依赖管理用 go.mod 文件,特别简单,不用装Maven那种复杂的工具
  • 错误处理必须显式写出来,虽然麻烦但很安全

Java的做法:

  • Spring Boot框架功能特别全,但配置有点复杂
  • 可以用JPA(自动生成SQL)或者MyBatis(手写SQL映射)
  • Maven或Gradle管理依赖,功能强大但学习成本高
  • 异常处理有完整的体系,可以用try-catch

性能和使用体验

Go项目启动特别快,基本上秒开,因为编译成了单个可执行文件。内存占用也小,就像开一个小型电动车,灵活省油。

Java项目启动要慢一些,但一旦运行起来就很稳定。内存占用大一些,像开一辆性能车,启动慢但动力足。

在并发处理上,Go的Goroutine特别轻量,可以轻松处理成千上万的并发请求,就像有很多小工人在同时干活。Java用线程池,功能强大但要小心管理。

Go版本的购物车代码:

// 一个结构体加方法
type cartController struct{}

func (c *cartController) List(ctx context.Context, req *CartRequest) (*CartResponse, error) {
    userId := service.GetUserId(ctx)  // 直接获取用户ID
    result, err := service.GetCartList(userId)  // 调用服务层
    return result, err  // 返回结果和可能的错误
}

Java版本:

@RestController  // 用注解标记这是控制器
@RequestMapping("/api/cart")
public class CartController {
    
    @Autowired  // 自动注入服务
    private CartService cartService;
    
    @GetMapping
    public ResponseEntity<List<CartItem>> list(HttpServletRequest request) {
        Long userId = getCurrentUserId(request);
        return ResponseEntity.ok(cartService.getCartList(userId));
    }
}

Go更直接,Java更"自动化"。

部署方式的差异

部署Go项目:

  • 编译成一个可执行文件
  • 直接运行 ./my-shop 就启动了
  • 不需要安装额外的运行时环境
  • Docker镜像很小,只有10-20MB

部署Java项目:

  • 打包成JAR文件
  • 需要安装Java运行环境
  • 运行 java -jar app.jar
  • Docker镜像比较大,要100-200MB

Java转Go:

  1. 忘掉"类"的概念 - Go没有传统面向对象,用结构体和组合
  2. 习惯显式错误处理 - Go要求每次都要检查错误,虽然麻烦但安全
  3. 理解接口的隐式实现 - 在Go里,只要实现了接口的方法,就自动实现了接口
  4. 掌握轻量级并发 - Goroutine用起来比Java线程简单
  5. 适应简单的依赖管理 - go mod 比Maven简单直接

需要注意的差异:

  1. Go的接口是隐式实现的
  2. Go的错误处理机制不同
  3. Go没有传统的面向对象继承
  4. Go的并发模型更轻量级

适用场景分析

选择Go的情况:

  • 高并发、低延迟需求
  • 微服务架构
  • 资源受限环境
  • 快速原型开发

选择Java的情况:

  • 企业级复杂业务
  • 需要丰富生态支持
  • 已有Java技术栈团队
  • 需要成熟的监控和治理

许可证

本项目基于Golershop开源项目开发,遵循原项目的开源协议。

原项目协议: 详见 原项目LICENSE文件


致谢列表

开源项目致谢

  • Golershop: 提供了优秀的电商系统基础框架
  • GoFrame: 优秀的Go语言Web框架
  • Vue.js: 渐进式JavaScript框架
  • Element Plus: Vue 3组件库

学习资源

  • GoFrame官方文档
  • 原项目技术文档
  • 社区技术文章和教程

技术对比参考

  • Spring Boot官方文档
  • Go语言官方文档
  • 微服务架构设计模式

最后更新: 2026-08-22

About

一些关于GO语言的学习

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages