1. 关于我(在找远程工作,给机会的老板可以联系)

【个人介绍】在大学期间,我连续三年获得学院奖学金和国家励志奖学金。大二时,我创办了学校的Android俱乐部,并担任第一任社团主席。在大二暑假,我代表学校前往上海的Google公司进行交流学习,并获得了最佳团队奖。从2013年下半年起,我在大学未毕业时便开始实习,从Android开发到iOS开发,再到Spring Boot、Spring Cloud、Go和Python,我熟练掌握了多门开发语言,最终专注于后端和服务器架构。职业生涯从实习生、开发组长、部门主管,一步步发展到研发总监,这期间不仅是技术的积累,更是对产品、业务和架构的深入理解。除了技术方面的积累,在业务层面也有显著的提升。毕业后,我在中山创办了中山GDG(Google Developer Group)谷歌开发者社区,并连续两年兼任中山火炬职业技术学院的外聘老师。同时,我在GitHub社区也有多个开源项目,积极分享和贡献我的技术成果。

【一句话】 我是一名后端开发工程师,工作10年+,开发过Android,IOS,主攻Java+Go+Python,懂服务器架构(Jenkins,Docker,K8s)。


2. 后端

后端是用Go写的RuoYi权限管理系统 (功能正在持续实现)
用DDD领域驱动设计(六边形架构)做实践

后端 GitHub地址

后端 Gitee地址


3. 前端

本项目没有自研前端,前端代码为 RuoYi-Vue3 官方前端Vue3版

推荐用我Fork的这个版本,在开发到后期,我拉了最新的前端,发现最新版前端有很多bug


4. Go后端技术栈(持续在对齐项目,在补充)

功能

框架

是否采用

备注

配置管理

Viper


功能丰富,支持动态重载

Envconfig

轻量级库

验证码

base64Captcha


提供了生成各种类型验证码的功能

Web

Iris


高性能、灵活且易于使用的Go Web框架

Gin

快速且高效的Go Web框架

goFrame

高性能、模块化和企业级的全栈开发框架

beego

全功能的MVC框架

ORM

gorm


Go语言中一个非常流行的ORM框架

Xorm

简洁、易用且功能强大的Go语言ORM库,不过没维护了

SQLBoiler

通过Go的代码生成器来实现的ORM工具

内存缓存

Bigcache

高性能、持久化的键值存储库

适合存储永不过期或者生命周期非常长的数据

freecache


高性能的内存缓存库

Groupcache

Google开源的一个分布式缓存和缓存填充系统

主要用于大型系统的缓存共享

日志记录

zerolog

高性能的结构化日志库,专为JSON输出优化,支持零分配日志记录

适合微服务和云原生应用

Zap


高性能、结构化的日志库,特别强调速度和效率

项目配合用了lumberjack,实现日志文件的自动切割和管理功能

Logrus

以其易用性和灵活性著称

seelog

支持复杂的过滤规则、多级日志处理管道和多种输出目标

依赖注入

wire

由Google开源的依赖注入工具,它通过代码生成的方式,在编译时期完成依赖注入

dig

提供了高性能和可读性,支持构造函数注入、函数参数注入和结构体字段注入

Redis

go-redis/redis


ORM 代码生成工具

go-gorm/gen


Friendly & Safer GORM powered by Code Generation

JWT

jwt


jwt-go 衍生版

jwx

实现各种 JWx(JWA/JWE/JWK/JWS/JWT,也称为 JOSE)技术的 Go 模块

参数校验

validator


提供了一种优雅的方式来定义和执行各种数据验证规则

govalidator

提供了多种内置的验证标签和自定义标签支持

主机资源

gopsutil


用于检索系统和进程信息的库,包括CPU、内存、磁盘、网络等信息

syscall


Go的标准库

定时任务

cron


功能强大的库,类似于Unix的cron调度程序。它支持标准的cron语法,并且可以处理秒级的精度。

gocron

简单而强大的任务调度库,类似于Python的schedule库

功能模块对应的开源库,还有很多我未知的(基于个人认知局限),以上只列了一部分,大佬有其他更好的欢迎提issue一起分享试用


5. 数据库(后面再考虑要不要支持多几个数据库)

ORM框架

数据库

是否采用

备注

gorm

PostgreSQL


支持,但对于若依的前端,Bug比较多

Mysql


默认

Sqlite

如果用这个的话,需要重新用gorm生成模型文件

因为sqlite不知道如何进行字符串转换*time.Time,会报错。

RuoYi 数据库脚本用我备份的数据库脚本


6. 项目目录(持续在对齐项目,在补充)

RuoYi-Go/
├── cmd/
│   └── api/
│       └── main.go
├── config/
│   └── config.yaml
├── internal/
│   ├── domain/
│   │   ├── model/
│   │   │   └── demo.go
│   ├── application/
│   │   └── usecase/
│   │       └── demo_usecase.go
│   ├── ports/
│   │   ├── input/
│   │   │   └── demo_service.go
│   │   └── output/
│   │       └── demo_repository.go
│   ├── adapters/
│   │   ├── api/
│   │   │   └── demo_handler.go
│   │   ├── persistence/
│   │   │   └── demo_repository.go
├── di/
│   └── container.go
├── pkg/
│   │   ├── db/
│   │   │   └── database.go
│   │   ├── jwt/
│   │   │   └── jwt.go
│   │   ├── logger/
│   │   │   └── logger.go
│   │   ├── config/
│   │   │   └── config.go
└── go.mod


7. 环境(工具)

Go 1.22.2

Visual Studio Code 神器

JetBrains Fleet (目前还是免费用,类似微软的VS Code,不喜勿喷) PS:发现暂不支持安装插件,不太好用

DBeaver Community (SQL客户端和数据库管理工具)

Another Redis Desktop Manager (Redis 客户端)


8. 致谢

致谢 RuoYi

致谢以上项目使用到的开源库,不分先后哈

致谢以上开发用到的工具


9. 缺陷(or TODO)

  1. 本项目是纯后端项目,前端是用RuoYi前端,所有为了适配RuoYi前端,有些写法会不太遵循Go语言的规范,不过不影响使用
  2. 当你有每一步都自己写的时候,你会发现若依前端与后端的接口代码\数据真***
  3. 定时任务已实现,只是目前只支持无参数形式的定时任务,后续再加可以传参数的
  4. 新建用户的时候无法在“添加用户”的弹框里,选择岗位和角色,这个是因为前端接口用/system/user/去接收岗位和角色列表,这个接口又和/system/user/{userId:uint}获取用户信息接口冲突,导致这条接口失效,被重定向。这个是iris暂时没法解决的(有主意的朋友可以帮忙看下)
  5. 一些小细节还未实现(总感觉定时任务这里有点问题,有遇到的同学反馈一下)


10. 怎么运行(go版本,1.22.2)

  1. 代码运行,拉下代码后,进项目,先执行go mod tidy拉下依赖,成功后运行/cmd/api/main.go
  2. Windows系统部署,代码成功运行后,命令行执行 ./build/build.cmd 即可,会得到一个exe,然后在exe同目录下创建config文件夹,然后把config.yaml文件复制进去(代码是这个文件名,但具体文件我没提交,可以拿demo文件修改),然后运行exe即可
  3. Linux系统部署,代码成功运行后,用Dockerfile构建镜像,然后运行镜像即可。同样注意config.yaml配置文件,自己改代码或者改配置文件。
  4. 我已经将我本地的推送到腾讯云公有镜像仓库,后面有时间写个教程(怎么将自己的项目发布到公有仓库),然后再写一个用我的公有镜像仓库的教程,这样大家可以快速部署

Docker

RuoYi-Go(Go版RuoYi)_权限管理系统

腾讯云 

RuoYi-Go(Go版RuoYi)_RuoYi_02


11. 代码生成

代码生成这块有新想法,想写另一个项目开源出来:go_auto_tools代码生成这块有新想法,想写另一个项目开源出来:go_auto_tools
代码生成这块有新想法,想写另一个项目开源出来:go_auto_tools


12. 最后

目前项目还是一个人写,边工作边写,主要是下班后写,所以可能会慢一些哈,如果不介意的话,点个 Start 持续关注,谢谢啦,有什么建议可以提issue哈。


13. 还有一个最后(系统截图)

登录

RuoYi-Go(Go版RuoYi)_权限管理系统_03

首页

RuoYi-Go(Go版RuoYi)_RuoYi_04

用户列表

RuoYi-Go(Go版RuoYi)_Golang_05