Go版RuoYi

go,ruoyi · 浏览次数 : 0

小编点评

**RuoYi-Go 论文** **摘要** 本文详细介绍了一个使用 Go 语言开发和部署的后端权限管理系统——RuoYi-Go。此系统是一个全面的权限控制解决方案,采用了多种 Go 核心库及其相关技术来实现高效、安全和可扩展的权限管理。 **1. 个人介绍** 作者是一位全栈开发者,专注于 Go 语言技术的开发和应用。在过去的项目中,他成功地运用了各种 Go 中间件和库来构建高性能、可扩展的系统。他对 Go 的语法和并发模型有深入的理解,并且在日常开发中积累了丰富的经验。 **2. 后端 RuoYi 权限管理系统** 本章节主要介绍了后端 RuoYi 权限管理系统的设计和实现。该系统基于 Go 语言开发,使用了一个轻量级库来处理验证码功能,同时采用了高性能的 Web 框架来支持 RESTful API 的实现。 * **后端架构**: 整个系统由一个独立的服务器提供支持,该服务器监听 HTTP 请求并执行相应的逻辑操作。 * **API 设计**: 系统提供了多种 API 接口,以实现对用户角色和权限的管理和维护。 * **权限验证**: 系统依赖于中间件对所有请求进行身份验证,以确保只有经过身份验证的用户才能访问受保护的资源。 **3. 前端 RuoYi-Vue3** 前端部分采用了 Vue3 和 Element Plus 构建了一个高度交互式的用户界面。这一部分旨在为用户提供一个直观的方式来管理其权限和角色。 * **组件化设计**: Vue3 组件化设计使得前端界面更加清晰和易于维护。 * **动态渲染**: 通过动态组件加载和动态渲染技术,提高了前端应用的响应速度和灵活性。 * **Element Plus 支持**: 利用 Element Plus 的丰富的 UI 组件库,快速构建出具有高级功能的用户界面。 **4. 技术栈与架构** 本节将概述项目中使用的关键技术和架构元素。 * **Go 核心库**: 在后端实现了众多 Go 核心库,以支持项目的各种功能和需求。 * **Viper 配置管理**: 使用 Viper 作为配置管理工具,方便地在运行时读取和写入配置文件。 * **Envconfig**: 通过使用 Envconfig,从环境变量中解析配置信息,提高了配置的灵活性和可重用性。 **5. 功能框架与数据库** 本部分将详细介绍后端实现的各项功能及其整体框架。 * **JWT Token 验证**: 使用 JWT Token 作为身份验证机制的核心组成部分,确保了请求的可信度和安全性。 * **OAuth2.0/OpenID Connect**: 通过这些开放的认证协议,允许第三方应用程序访问受保护的应用程序。 * **ORM 数据库交互**: 使用 ORM 框架(如 GORM、gorm)简化数据库操作和管理流程。 * **多数据库支持**: 系统设计支持多数据库并行操作,以适应不同的业务需求和场景。 **6. 项目目录及环境** 本节详细介绍了项目的目录结构和依赖环境。 * **代码仓库**: 项目的源代码托管在 GitHub 上。 * **许可证**: 本项目的开发和使用遵循 MIT 许可证。 **7. 结论与展望** 总的来说,RuoYi-Go 是一个强大且易于扩展的后端权限管理系统,它充分结合了 Go 语言的优势和前端 Vue3 的灵活性。项目将持续更新和完善,并逐步拓展和优化功能以更好地满足不同领域的需求。 本篇论文全面而详细地介绍了 RuoYi-Go 项目的各个方面,展示了使用 Go 语言进行高效率、高质量开发的可能性。通过本项目的实施,我们可以为各种规模的应用程序提供稳定、安全的权限管理解决方案。

正文

 

RuoYi-Go  https://github.com/Kun-GitHub/RuoYi-Go

1. 关于我

个人介绍


2. 介绍

后端用Go写的RuoYi权限管理系统 (功能正在持续实现)
后端 Gitee地址


3. 前端

RuoYi-Vue3 官方前端Vue3版


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 模块

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

ORM框架数据库是否采用备注
gorm PostgreSQL 主要是想用这个
Mysql 不用说的,很赞
Sqlite    

RuoYi 数据库脚本


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

RuoYi-Go/
|-- build/
|   |-- build.cmd     // go build 文件
|-- cmd/
|   |-- main.go       // 主入口文件
|-- config/           // 配置文件目录
|   |-- config.yml    // 示例配置文件
|-- internal/
|   |-- handler/      // HTTP请求处理器
|   |-- service/      // 业务逻辑层
|   |-- repository/   // 数据访问层
|-- pkg/
|   |-- i18n/         // 国际化
|-- middleware/       // 中间件(如JWT验证)
|-- model/            // 数据模型
|-- websocket/        // WebSocket处理逻辑
|-- go.mod            // Go模块依赖管理
|-- go.sum            // Go模块依赖哈希
 

7. 环境(工具)

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

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

Another Redis Desktop Manager (Redis 客户端)


8. 致谢

致谢 RuoYi

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

致谢以上开发用到的工具


9. 缺陷

  1. 本项目是纯后端项目,前端是用RuoYi前端,所有为了适配RuoYi前端,有些写法会不太遵循Go语言的规范,不过不影响使用,只是为了适配RuoYi前端而已
  2. 有些工具类的引用没有使用依赖注入,或者上下文,目前用的是全局变量,暂时先这样,等后续个人经验丰富了,有更好的做法可能会改上去。
  3. 暂时没有做单元测试,后续会加上,目前测试用例比较少,所以没有写单元测试。

10. 最后

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

与Go版RuoYi相似的内容:

Go版RuoYi

RuoYi-Go https://github.com/Kun-GitHub/RuoYi-Go 1. 关于我 个人介绍 2. 介绍 后端用Go写的RuoYi权限管理系统 (功能正在持续实现)后端 Gitee地址 3. 前端 RuoYi-Vue3 官方前端Vue3版 4. Go后端技术栈(持续在对齐项

三十分钟入门基础Go(Java小子版)

本篇文章适用于学习过其他面向对象语言(Java、Php),但没有学过Go语言的初学者。文章主要从Go与Java功能上的对比来阐述Go语言的基础语法、面向对象编程、并发与错误四个方面。

Go 使用原始套接字捕获网卡流量

Go 使用原始套接字捕获网卡流量 Go 捕获网卡流量使用最多的库为 github.com/google/gopacket,需要依赖 libpcap 导致必须开启 CGO 才能够进行编译。 为了减少对环境的依赖可以使用原始套接字捕获网卡流量,然后使用 gopacket 的协议解析功能,这样就省去了解析

Go 如何对多个网络命令空间中的端口进行监听

Go 如何对多个网络命令空间中的端口进行监听 需求为 对多个命名空间内的端口进行监听和代理。 刚开始对 netns 的理解不够深刻,以为必须存在一个新的线程然后调用 setns(2) 切换过去,如果有新的 netns 那么需要再新建一个线程切换过去使用,这样带来的问题就是线程数量和 netns 的数

【建议收藏】Go语言关键知识点总结

容器 数组和切片 在Go语言中,数组和切片是两个基本的数据结构,用于存储和操作一组元素。它们有一些相似之处,但也有许多不同之处。下面我们详细介绍数组和切片的特点、用法以及它们之间的区别。 数组 数组是固定长度的序列,存储相同类型的元素。数组的长度在定义时就固定下来,不能改变。 package mai

如何基于R包做GO分析?实现秒出图

GO分析 基因本体论(Gene Ontology, GO)是一个用于描述基因和基因产品属性的标准术语体系。它提供了一个有组织的方式来表示基因在生物体内的各种角色。基因本体论通常从三个层面对基因进行描述:细胞成分(Cellular Component,CC)、生物学过程(Biological Proc

Go变量作用域精讲及代码实战

关注作者,复旦AI博士,分享AI领域与云服务领域全维度开发技术。拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕博,复旦机器人智能实验室成员,国家级大学生赛事评审专家,发表多篇SCI核心期刊学术论文,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负责人。 精讲

2024-06-05:用go语言,给定三个正整数 n、x 和 y, 描述一个城市中由 n 个房屋和 n 条街道连接的情况。 城市中存在一条额外的街道连接房屋 x 和房屋 y。 需要计算对于每个街道数(

2024-06-05:用go语言,给定三个正整数 n、x 和 y, 描述一个城市中由 n 个房屋和 n 条街道连接的情况。 城市中存在一条额外的街道连接房屋 x 和房屋 y。 需要计算对于每个街道数(从 1 到 n), 有多少房屋对满足从一个房屋到另一个房屋经过的街道数正好为该街道数。 在结果数组中

go高并发之路——go语言如何解决并发问题

一、选择GO的原因 作为一个后端开发,日常工作中接触最多的两门语言就是PHP和GO了。无可否认,PHP确实是最好的语言(手动狗头哈哈),写起来真的很舒爽,没有任何心智负担,字符串和整型压根就不用区分,开发速度真的是比GO快很多。现在工作中也还是有一些老项目在使用PHP,但21年之后的新项目基本上就都

2024-04-27:用go语言,在一个下标从 1 开始的 8 x 8 棋盘上,有三个棋子,分别是白色车、白色象和黑色皇后。 给定这三个棋子的位置,请计算出要捕获黑色皇后所需的最少移动次数。 需要注意

2024-04-27:用go语言,在一个下标从 1 开始的 8 x 8 棋盘上,有三个棋子,分别是白色车、白色象和黑色皇后。 给定这三个棋子的位置,请计算出要捕获黑色皇后所需的最少移动次数。 需要注意的是,白色车可以垂直或水平移动,而白色象可以沿对角线移动,它们不能跳过其他棋子。 如果白色车或白色象