:::info
go-gin-api 是基于 Gin 进行模块化设计的 API 框架,封装了常用的功能,使用简单,致力于进行快速的业务研发,同时增加了更多限制,约束项目组开发成员,规避混乱无序及自由随意的编码。
建议 供参考学习,线上使用请谨慎! :::
视频教程
项目想法
快速开始
环境准备
- golang 1.16+
- 因为使用了
//go:embed特性;
- 因为使用了
- MySQL
- 连接地址,例如:127.0.0.1:3306;
- 数据库名,例如:go_gin_api,会在此数据库下初始化数据表;
- 用户名,不可为空;
- 密码,不可为空;
- Redis
- 连接地址,例如:127.0.0.1:6379;
- 密码,可为空;
- 连接DB,默认是 0 ;
下载运行
```bash $ git clone https://github.com/xinliangnote/go-gin-api.git $ cd go-gin-api $ go run main.go -env fat
// -env 表示设置哪个环境,主要是区分使用哪个配置文件,默认为 fat // -env dev 表示为本地开发环境,使用的配置信息为:configs/dev_configs.toml // -env fat 表示为测试环境,使用的配置信息为:configs/fat_configs.toml // -env uat 表示为预上线环境,使用的配置信息为:configs/uat_configs.toml // -env pro 表示为正式环境,使用的配置信息为:configs/pro_configs.toml
<a name="fCzoA"></a>##<a name="hfh8D"></a>## 安装界面首次启动程序之后,会在浏览器中自动打开安装界面,链接地址:http://127.0.0.1:9999/install。<br /><br />因为程序会使用到 Redis 和 MySQL,所以安装前请输入 Redis、MySQL 配置信息。<br />点击初始化按钮,会将用到的数据表和默认数据进行初始化,在右侧可以看到初始化的日志信息。<br /><br />如上,初始化成功后,初始化的表结构 UML 图如下:<br /><br />重新启动程序,会在浏览器中自动打开登录界面,链接地址:http://127.0.0.1:9999/login 。<a name="CXj3g"></a>##<a name="rWi33"></a>## 登录界面<br />输入默认账号 admin,密码 admin 即可登录成功。<a name="W0Upr"></a>##<a name="gvYgp"></a>## 仪表盘界面<br />显示 项目信息、内存信息、硬盘信息、CPU信息 等。<a name="TJkE6"></a>##<a name="rSqbx"></a>## 配置信息 -> 告警邮箱在这里可以配置系统告警的发件人和收件人,当系统发生 Panic 时,进行邮件通知,邮件模板如下:<br /><a name="zPrUa"></a>##<a name="Jy1yL"></a>## 配置信息 -> 错误码<br />展示系统中定义的错误码。<a name="KS5vb"></a>##<a name="Qazg1"></a>## 代码生成器 -> 生成数据表 CURD<br />在左侧可以单选或多选数据表,进行代码生成。<a name="s5IcQ"></a>##<a name="aFkzB"></a>## 代码生成器 -> 生成控制器方法<br />在左侧可以设置需要生成的 handler 名称。<a name="mR0yD"></a>##<a name="KOwzV"></a>## 授权调用方 -> 调用方<br />设置谁可以调用我的接口,同时还可以授权调用我哪些接口。<a name="te07B"></a>##<a name="rp3k4"></a>## 授权调用方 -> 使用说明<a name="k8qH8"></a>##<a name="fz3M9"></a>## 后台任务 -> 任务列表<a name="YkCji"></a>##<a name="U9Tna"></a>## 系统管理员 -> 管理员<br /><br />设置谁可以登录后台,可以对其进行 禁用、重置密码、菜单授权、下线、删除 等操作。<a name="qLccQ"></a>##<a name="bkI7U"></a>## 系统管理员 -> 菜单管理<br />设置后台侧边栏的菜单。<a name="eqgXD"></a>##<a name="GsRdo"></a>## 查询小助手 -> 查询缓存<br />查询 Redis 缓存内容 和 有效期,同时还可以清空缓存。<a name="fgvgn"></a>##<a name="SvVLA"></a>## 查询小助手 -> 查询数据<br /><br />查询 MySQL 数据,支持输入 SQL 语句执行和分析。<a name="DL1v0"></a>##<a name="ZwDkv"></a>## 实用工具箱 -> 服务升级<br />不同版本提供相应的升级指导。<a name="Hd4aR"></a>##<a name="MovZn"></a>## 实用工具箱 -> Hashids<br />程序中对传递 id 的场景,均使用密文进行传递。<a name="E97qq"></a>##<a name="JtuA8"></a>## 实用工具箱 -> 调用日志<br />展示最新的 100 条调用日志。<a name="lpnDu"></a>##<a name="yyuq2"></a>## 实用工具箱 -> 接口文档<a name="Uyl8g"></a>##<a name="vu0N5"></a>## 实用工具箱 -> GraphQL<a name="gqPnu"></a>### 查询操作```jsonquery {bySex(sex: "男") {idnamesexmobile}}
更新操作
mutation {updateUserMobile(data: {id: "1", mobile: "13299999999"}) {idnamesexmobile}}
实用工具箱 -> 接口指标
实用工具箱 -> WebSocket
其他
代码生成工具 -> 生成数据表 CURD
意义:在进行业务需求开发时,创建完数据表后,执行代码生成工具,常用的 CURD 操作全部生成完毕,使用的时候只需要 . 后面的方法即可,这样大大提高了业务开发效率。
代码生成工具 -> 生成控制器方法
意义:本次需求的研发负责人通过定义 type interface{} 的方式,定义出需要开发的方法,执行代码生成工具,每个方法的空实现都会生成在一个单独的文件中,开发人员只需去实现各自方法即可,便于进行分工和代码管理。
GraphQL
项目中使用 gqlgen 实现了 GraphQL 查询,会发现与 gqlgen init 初始化的 demo 不同,是因为代码已经集成到 go-gin-api 中,比如集成了项目 core 包中的 链路、日志 等。
目前仅实现了 Demo, resolver 使用的是模拟数据,不过使用可复用的 service 也已经实现了,在代码已注释,感兴趣的可以深入研究。
Prometheus
启动 Prometheus 的配置文件,可参考:
- ./deployments/prometheus/prometheus.yml
Loki
Loki 是一个水平可扩展,高可用性,多租户的日志聚合系统,有兴趣可以研究一下。
启用 Loki 的配置文件,可参考:
- ./deployments/loki/loki.yaml
- ./deployments/loki/promtail.yaml
健康检查
地址:http://127.0.0.1:9999/system/health
{"timestamp": "2021-06-26T16:33:46.891484+08:00","environment": "fat","host": "127.0.0.1:9999","status": "ok"}
请作者喝咖啡
联系作者



