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

djjk · · 1815 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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 API 和 RPC 服务,主要目的是为了方便大家学习怎么用Golang编写前后端分离的纯后端项目

名词解释

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

设计目标

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

性能目标

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

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

详细设计文档

系统架构

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

image

  • 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 # 项目入口文件
交互流程

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

数据流向

image

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

✨ 技术栈
???? 开发规范

模块简介

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

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

数据库设计

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

项目参考


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1815 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传