22

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

 3 years ago
source link: https://studygolang.com/articles/31363
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

ffly-plus

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

github: https://github.com/colinrs/ff...

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倍计算;

详细设计文档

系统架构

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

mmmEfy3.png!mobile

  • ffly-plus 主要提供HTTP 和RPC 服务
  • 后端使用MySQL

:green_book: 目录结构

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 # 项目入口文件

交互流程

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

数据流向

FJjuIvJ.png!mobile

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

:sparkles: 技术栈

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

:book: 开发规范

模块简介

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

用户模块

  • 注册
  • 查询信息
  • 更新
  • 删除

数据库设计

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就能够并行做编码实现了

:memo: 接口文档

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

性能测试

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

设计与折衷

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

暂无

潜在风险

暂无

运维

:rocket: 部署

:computer: 常用命令

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

项目参考

有疑问加站长微信联系

iiUfA3j.png!mobile

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK