风离不摆烂学习日志 Day6 — 校园树洞项目重构(长期更新)

关于校园树洞项目

时间点: 2022 03-01 ~ 2022 07-20 基于全栈云原生架构的 "三高" 选课系统解决方案

2022 07-20 ~ 2022 08-10 校园树洞 Java SpringBoot版 使用人数 3000+

2022 11-24 ~ 至今 重构为 校园树洞 Go + Gin + Grom 版

历程: image-20221124133520553

本项目前身 原本为Java微服务项目 整合了各种技术 例如 SpringCloud Alibaba Nacos Sentinel Redis RabbitMq MybatisPlus K8s Jenkins....

后面由于需求变更以及代码混乱等各种原因 后面重构为Java SpringBoot单体项目 这次 代码结构清晰 并且使用了 设计模式 使得项目具有高扩展性 后台项目结构如图所示

image-20221124133932070

并且适配了 不同的学校

image-20221124134053172

项目展示截图如下

image-20221124135026631

为何会产生重构的想法?

学如逆水行舟 不进则退

Java太卷了 转Go 试试~

学点新东西

闲着没事干~


项目重构思路

由于SpringBoot版校园树洞项目 已经足够成熟与稳定了 转Go版本 思路直接借鉴即可 毕竟思路和设计模式是通用的

项目技术栈

  • Go (又称Golang)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言
  • Gin 一个类似于martini但拥有更好性能的API框架, 由于使用了httprouter, 速度提高了近40倍
  • Gorm 采用Gorm 2.0版本开发, 包含一对多、多对多、事务等操作
  • Jwt 使用JWT轻量级认证, 并提供活跃用户Token刷新功能
  • Casbin Casbin是一个强大的、高效的开源访问控制框架,其权限管理机制支持多种访问控制模型
  • Viper Go应用程序的完整配置解决方案, 支持配置热更新
  • Lumberjack 设置日志文件大小、保存数量、保存时间和压缩等
  • GoFunk 包含大量的Slice操作方法的工具包
  • Validator 使用validator v10做参数校验, 严密校验前端传入参数
  • Mysql 关系型数据库

项目踩坑记录

Gorm框架官方中文文档:

https://gorm.io/zh_CN/docs/index.html

gorm框架表名自动加s问题

查看日志会发现表名自动加了s

image-20221124155847848

解决方案

image-20221124160008258

或者在GORM配置中设置

db, err := gorm.Open(mysql.Open(xxx.xxx.xxx.xxx)), &gorm.Config{
		NamingStrategy: schema.NamingStrategy{
			SingularTable: true, // 使用单数表名
		},
	})