推荐一款好用的go web项目框架
github地址:https://github.com/MRchenao/gogebi欢迎star
这是什么?
1.这是一个基于go语言gin框架的web项目骨架,专注于前后端分离的业务场景,其目的主要在于将web项目主线逻辑梳理清晰,最基础的东西封装完善,开发者更多关注属于自己的的业务即可。
2.本项目骨架封装(主要包括用户相关的接口参数验证器、注册、登录获取token、自动化配置、优雅的路由风格、简易的数据库操作CURD以及JWT鉴权、单元测试、grpc、swagger文档等),开发者拉取本项目骨架,在此基础上就可以快速开发自己的项目。
3.后续待完善功能为后台管理权限,角色用户等功能的开发,框架优化等
项目目录结构介绍
├── app 项目应用目录
│ ├── Admin 后台管理模块
│ │ ├── Controllers 后台管理控制器
│ │ ├── Middleware 后台管理中间件(存放鉴权,中间事务处理等逻辑文件)
│ │ └── Services 后台业务逻辑服务模块
│ ├── Http 前端api模块
│ │ ├── Controllers
│ │ │ └── Api api模块控制器存放文件位置,以下几个为样例文件,实际开发中可根据样例开发,不用可删除
│ │ │ ├── address.go
│ │ │ ├── ft.go
│ │ │ ├── main.go api控制器通用方法文件
│ │ │ └── user.go
│ │ ├── Middleware 中间件模块
│ │ │ ├── auth.go 用户权限验证
│ │ │ └── pageSize.go 分页中间件
│ │ ├── Serializer 序列化输出模块
│ │ │ ├── address.go
│ │ │ ├── ft.go
│ │ │ ├── main.go 序列化输出公用方法文件
│ │ │ └──user.go
│ │ └── Services 业务逻辑模块
│ │ ├── address.go
│ │ ├── ft.go
│ │ ├── main.go 业务逻辑公用方法文件
│ │ └── user.go
│ ├── Models 数据库模型
│ │ ├── address.go
│ │ ├── Build 数据库公用操作方法文件
│ │ │ └── build.go
│ │ └──user.go
│ └── Repositories 数据仓库模块(获取数据,数据缓存等操作逻辑在这一层完成)
│ ├── address.go
│ └──user.go
├── config 业务配置文件
│ └── config.yml
├── core 框架核心逻辑模块
│ ├── bootstrap.go 核心启动文件
│ ├── log.go 日志文件
│ ├── router.go 核心路由处理文件
│ ├── rpc_service.go rpc服务
│ └── viper.go 配置加载初始化
├── docs swagger文档文件
│ ├── docs.go
│ ├── swagger.json
│ └── swagger.yaml
├── gin.log 项目日志文件
├── main.go 项目入口文件
├── Makefile
├── proto proto文件
│ ├── hello.pb.go
│ ├── hello.proto
├── routes 路由文件
│ ├── auth_routes.go 带权限路由
│ ├── main.go 路由公用配置主文件
│ └── routes.go 不带权限路由
├── rpc
│ └── rpc_server.go rpc服务模块
├── storage 日志文件存储模块
│ └── logs
│ └── log.log
├── test 单元测试模块
│ ├── address_test.go
│ └── main.go 单元测试公用方法文件
└── utils 工具模块目录├── database 数据库操作│ └── db.go├── redis_factory redis操作│ └── redis.go├── sign jwt加密鉴权│ └── jwt.go└── util.go 工具方法
##项目开发流程
基本流程
1.首先添加一个前端请求url,在routes/routes.go文件中添加您的url,格式如下:
各参数对应的含义分别是:请求类型,请求url,请求的控制器方法
{http.MethodPost, "user/login", ctrl.user.Login}
2.在app/Http/Controllers/Api目录下创建控制器文件address.go添加login方法,具体请看项目文件
3.在app/Http/Services中创建对应的services文件,这里书写业务逻辑,同理在repositories创建操作数据的文件,在model中创建数据库文件
4.在app/Http/Serializer中创建最终输出的数据序列化处理逻辑文件,最终输出给前端,请求结束
针对需要鉴权的路由的处理
基本流程中展示的是无需鉴权操作的流程,针对需要鉴权的路由,首先您需要在routes/main.go文件的AuthRouters方法里面添加您的鉴权中间件,例如:
{MiddleWares: []gin.HandlerFunc{Middleware.Auth()}, Uris: authMiddleWareRoutes()},
这里的MiddleWares就是需要添加的鉴权的中间件,如果有多个可以添加多个中间件。Uris定义了你需要通过这个中间件的路由函数方法,接下来就是在路由函数方法中添加您的路由,您的所有在函数方法中添加的路由都会首先需要先通过您的中间件,具体样例可参考auth_routes.go文件
数据库操作
本项目是居于gorm来操作数据库的,其中在app/Models/Build下封装了针对不定条件的查询公用方法:
查询list
Build.BuildQueryList(wheres, []string{"*"}, "id desc").Find(&list)构建where条件
Build.BuildWhere(database.DB, wheres)不定条件更新
Build.BuildUpdates(addressModel, wheres, data)
其中where条件的构建格式如下:
// BuildWhere 构建where条件
//1、and 条件 where := []interface{}{
// []interface{}{"id", "=", 1},
// []interface{}{"username", "chen"},
//}
//2、结构体条件 where := user.User{ID: 1, UserName: "chen"}
//3、in,or 条件 where := []interface{}{
// []interface{}{"id", "in", []int{1, 2}},
// []interface{}{"username", "=", "chen", "or"},
//}
//4、map条件 where := map[string]interface{}{"id": 1, "username": "chen"}
//5、and or混合条件 where := []interface{}{
// []interface{}{"id", "in", []int{1, 2}},
// []interface{}{"username = ? or nickname = ?", "chen", "yond"},
//}
##项目配置
配置分两块,其中根目录下的.env文件主要配置一些项目基础配置如: 数据库,redis,路由前缀等的配置。
另一块配置在config目录下,使用viper配置,主要配置一些业务逻辑方面的配置
项目启动
如果安装了make环境的直接使用
make run
没有安装make环境的使用
go run main.go
项目编译
如果安装了make环境的直接使用
make build
没有安装make环境的使用
go build
项目线上部署
项目默认的端口是8081,将编译后的文件直接拉到线上,创建.env文件,配置config文件,doc文档,storage日志文件即可,部署目录结构如下
config/
drwxr-xr-x 2 root root 4096 Nov 23 18:12 docs/
-rwxr-xr-x 1 root root 232 Nov 23 18:08 .env*
-rwxr-xr-x 1 root root 43204377 Nov 24 11:08 gebi*
-rw-r--r-- 1 root root 78227 Nov 24 16:47 gin.log
drwxrwxrwx 3 root root 4096 Nov 23 17:11 storage/
github地址:
https://github.com/MRchenao/gogebi
推荐一款好用的go web项目框架相关推荐
- 2023年推荐几款开源或免费的web应用防火墙
2023年推荐几款开源或免费的web应用防火墙 2023年,数字经济将强势崛起,并且成为新一轮经济发展的动力,传统的黑客破坏性攻击如CC,转为更隐蔽的如0day进行APT渗透.所以无论私有服务器还是云 ...
- 几款常用的高质量web前端框架
Web前端框架就是为了节约开发成本和时间,一般开发一个项目都会用到前端框架(除非自己有前端开发团队),根据我经验找的几款web前端框架做出了分析.都是个人意见,仁者见仁智者见智. QUICK UI Q ...
- 几款常用的高质量Web前端框架!
近年来,Web前端技术的发展速度快得让人窒息,特别是最近几年一代又一代的变革一次又一次的创造.各大巨头又纷纷把技术转向HTML5和CSS3,各种企业级框架如雨后春笋般涌现. 那么今天就给大家介绍几个在 ...
- 从零开始写javaweb框架笔记2-搭建web项目框架
在前面我们已经创建了一个maven项目,但是pox.xml中还没有任何的maven依赖,随后会添加一些java web所需的依赖.在添加java web的依赖之前,我们需要把maven项目转换为jav ...
- 推荐一款超牛逼的Web SSH 客户端工具
webssh这个工具可以干啥: 在linux机器上安装python环境,并且使用命令pip3 install webssh,装上这个模块** 我们就可以在l浏览器web页面登录我们的linux机器,是 ...
- 推荐一款快速开发平台,web中最好的快速开发平台
力软快速开发平台是力软自主开发的基于SOA面向服务的应用系统开发平台,可以方便快捷的搭建企业.医院.工厂.学校等行业的企业级运营管理平台.平台采用.net.技术架构,webapi服务搭建. 力软快速开 ...
- 推荐10款GitHub中高价值的PHP项目(值得收藏)
一.码小六 - GitHub 代码泄露监控系统 码小六是一款 GitHub 代码泄露监控系统,通过定期扫描 GitHub 发现代码泄露行为,为企业安全保驾护航! Github链接:https://gi ...
- 网站安全检测:推荐 8 款免费的 Web 安全测试工具
随着 Web 应用越来越广泛,Web 安全威胁日益凸显.黑客利用网站操作系统的漏洞和 Web服务程序的 SQL 注入漏洞等得到 Web 服务器的控制权限,轻则篡改网页内容,重则窃取重要内部数据,更为严 ...
- 推荐一款自己常用的web前端框架
不知道现在大家使用的web前端框架都是什么?也许有人和我一样会想到jQuery,但今天给大家介绍的确实另外一款比较受欢迎的web前端框架,把我用的体验和大家分享一下,希望这款web前端框架能够被大家认 ...
最新文章
- 2022-2028年中国低氧铜杆行业市场研究及前瞻分析报告
- lower_bound和 upper_bound 用法(STL)
- 如果我要...(开发版)
- App设计灵感之十二组精美的租车类App设计案例
- ElasticSearch基本插件head
- SQL Server MDS(主数据服务)介绍
- shell mysql备份脚本_mysql备份脚本(shell)
- java-----任意进制间的转换
- 微服务乱码_本地正常服务器乱码
- 证明$r(A^TA) = r(A)$
- 惠康游戏手柄 WE-8400 Windows 10 驱动教程
- ISO18000-6C超高频RFID蓝牙写卡器HX9816UBT上位机命令数据块
- 盘点常用的IDC综合业务、财务及用户管理平台
- VLAN间路由的配置(一)普通VLAN间路由的配置
- 淘宝双十一自动做任务方案
- 纳什均衡定义、举例、分类
- ​LeetCode刷题实战603:连续空余座位
- 在Linux中传输文件/目录的scp命令
- 【Leetcode】1833. 雪糕的最大数量
- Java中String接受的最大字符串的长度
热门文章
- 《事半功倍读书法》读书笔记
- 编程培训c语言,最新C语言编程培训
- 【物联网】给我们带来的改变
- Gem5模拟器 for Ubuntu20.04
- Selection Sort
- 从Word文档中提取嵌入对象
- “在中国 为中国”战略升级 戴尔今年的DTF惊喜太多
- html怎么去掉已经默认的背景,css该怎么去掉背景颜色
- Apache Doris性能优化之Join Reorder和Doris Join调优原则
- 【微信小程序控制硬件 第13篇】安信可B站直播学习总结,微信小程序MQTT远程控制ESP8266 NodeMCU,谈谈微信生态那些事;