ffly-plus 又又又一个`gin` demo项目,带你快速上手用`gin`进行`web`开发!!!!

ffly-plus

又又又一个gin demo项目,带你快速上手用gin进行web开发, 在这个demo项目中,你可以学到项目结构设计、gorm的使用、gin中间件的编写、DB设计规范、Swagger文档生成、配置文件解析库viper使用、使用JWT进行身份鉴权认证、使用sentinel-go进行QPS限制、Makefile文件编写、项目文档结构设计和相关内容编写

github: https://github.com/colinrs/ffly-plus

ffly-plus

一款适合于快速开发业务的 Go Gin Demo,主要是提供 API, RPC 服务。

总体设计文档

需求

一般以产品的语言描述,这一块可以拷贝产品需求文档中的story list部分

本项目采用了一系列Golang中比较流行的组件,可以以本项目为基础快速搭建Restful Web APIRPC 服务,主要目的是为了方便大家学习怎么用Golang编写前后端分离的纯后端项目

名词解释

非相关领域内的同学需要看到文档需要提前了解的一些概念性质的东西

设计目标

功能目标和性能目标,功能目标一般是对产品需求的技术描述,性能目标是根据产品给出的数据对性能进行的评估。一般来说,新服务必须要有性能目标一项,性能目标可能会影响设计方案

性能目标

性能目标是新模块文档必不可少的一部分,很多项目对性能影响较大的话,也必须撰写性能目标,性能一般来说可能包含以下部分:

  • 日平均请求:一般来自产品人员的评估;
  • 平均QPS:日平均请求 除以 4w秒得出,为什么是4w秒呢,24小时化为86400秒,取用户活跃时间为白天算,除2得4w秒;
  • 峰值QPS:一般可以以QPS的2~4倍计算;

详细设计文档

系统架构

一般来说会有个简单的架构图,并配以文字对架构进行简要说明

在这里插入图片描述

  • ffly-plus 主要提供HTTP 和 RPC 服务
  • 后端使用MySQL
📗 目录结构
ffly-plus
├── config ## 配置
├── controller ## API实现,用来读取输入、调用业务处理、返回结果
│   └── api
│       └── v1
├── docs ## swag 文档
├── internal ##内部逻辑,业务目录
│   ├── cache ## 缓存
│   ├── code ## 错误码设计
│   ├── config ## 配置
│   ├── proto ## grpc proto
│   ├── sentinelm ## sentinel 限流
│   └── version ## 版本
├── models ## 数据库交互
├── pkg ## 一些封装好的 package
│   ├── token
│   └── utils
├── router ## 路由及中间件目录
│   ├── api
│   └── middleware
├── rpc ## 业务逻辑层
├── service ## 业务逻辑层
└── tool ## 小工具
    main.go # 项目入口文件
交互流程

简要的交互可用文字说明,复杂的交互建议使用流程图,交互图或其他图形进行说明

数据流向

在这里插入图片描述

用户的请求先到 controller,进行参数校验。然后到service层进行业务逻辑的处理,如果需要取数据,则由service向models获取数据。最终将结果返回给用户。

✨ 技术栈
  • 框架路由使用 Gin 路由
  • 中间件使用 Gin 框架的中间件
  • 数据库组件 GORM
  • 文档使用 Swagger 生成
  • 配置文件解析库 Viper
  • 使用 JWT 进行身份鉴权认证
  • 校验器使用 validator 也是 Gin 框架默认的校验器
  • 包管理工具 Go Modules: 视频:https://www.bilibili.com/video/av63052644/
  • 使用 make 来管理 Go 工程
  • 使用 JSON 文件进行多环境配置
📖 开发规范

模块简介

架构图中如果有很多模块,需要对各个模块的功能进行简要介绍

用户模块
  • 注册
  • 查询信息
  • 更新
  • 删除

数据库设计

CREATE TABLE `users` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `created_at` bigint unsigned DEFAULT NULL,
  `updated_at` bigint unsigned DEFAULT NULL,
  `deleted_at` bigint unsigned DEFAULT NULL,
  `is_delete` tinyint(1) DEFAULT NULL,
  `user_name` varchar(30) NOT NULL,
  `password_digest` longtext,
  `nickname` varchar(30) NOT NULL,
  `status` longtext,
  `avatar` varchar(1000) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `user_name` (`user_name`),
  UNIQUE KEY `nickname` (`nickname`),
  KEY `user_name_idx` (`user_name`),
  KEY `nickname_idx` (`nickname`)
) ENGINE=InnoDB AUTO_INCREMENT=1000011 DEFAULT CHARSET=utf8mb4

接口细节

输入什么参数,输出什么参数,根据接口前端、后端、APP、QA就能够并行做编码实现了

📝 接口文档

http://127.0.0.1:8000/swagger/index.html

性能测试

ab -n 1000 -c 100 'http://127.0.0.1:8000/version'

设计与折衷

设计与折衷是总体设计中最重要的部分

暂无

潜在风险

暂无

运维

🚀 部署

💻 常用命令
make
make - compile the source code
make clean - remove binary file and vim swp files
make ca - generate ca files
make docs - gen swag doc
make test - go test
make build - go build
部署
编译并生成二进制文件
make build
  • ./ffly-plus 运行
  • 你也可以选择用supervisor进行部署

监控

  • http://127.0.0.1:8001/debug/statsviz/
  • http://127.0.0.1:8000/
  • http://127.0.0.1:8000/debug/pprof/
版本查看
  • http://127.0.0.1:8000/version
  • ./ffly-plus -v

Features

  • Graceful restart or stop (fvbock/endless)
  • Cron
  • Redis

项目参考

  • https://github.com/Away0x/gin_weibo
  • https://github.com/1024casts/snake
  • https://github.com/eddycjy/go-gin-example
  • https://github.com/Gourouting/singo
  • https://github.com/Gourouting/giligili
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CoLiuRs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值