:::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>
### 查询操作
```json
query {
bySex(sex: "男") {
id
name
sex
mobile
}
}
更新操作
mutation {
updateUserMobile(data: {id: "1", mobile: "13299999999"}) {
id
name
sex
mobile
}
}
实用工具箱 -> 接口指标
实用工具箱 -> 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"
}