:::info go-gin-api 是基于 Gin 进行模块化设计的 API 框架,封装了常用的功能,使用简单,致力于进行快速的业务研发,同时增加了更多限制,约束项目组开发成员,规避混乱无序及自由随意的编码。🤩 关于 - 图1

建议 供参考学习,线上使用请谨慎! :::

🤩 关于 - 图2 🤩 关于 - 图3 🤩 关于 - 图4 🤩 关于 - 图5 🤩 关于 - 图6


视频教程

项目想法

快速开始

环境准备

  • golang 1.16+
    • 因为使用了 //go:embed 特性;
  • MySQL
    • 连接地址,例如:127.0.0.1:3306;
    • 数据库名,例如:go_gin_api,会在此数据库下初始化数据表;
    • 用户名,不可为空;
    • 密码,不可为空;
  • Redis

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

  1. <a name="fCzoA"></a>
  2. ##
  3. <a name="hfh8D"></a>
  4. ## 安装界面
  5. 首次启动程序之后,会在浏览器中自动打开安装界面,链接地址:http://127.0.0.1:9999/install。<br />![p_1.png](https://cdn.nlark.com/yuque/0/2021/png/1309959/1637391949183-f7645280-1b21-4278-8df3-289366fd4451.png#clientId=u2258124f-8157-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=1600&id=u0d1a0cb1&margin=%5Bobject%20Object%5D&name=p_1.png&originHeight=1600&originWidth=2330&originalType=binary&ratio=1&rotation=0&showTitle=false&size=172209&status=done&style=shadow&taskId=u930d1840-6358-471e-af71-f3e01faac84&title=&width=2330)<br />因为程序会使用到 Redis 和 MySQL,所以安装前请输入 Redis、MySQL 配置信息。<br />点击初始化按钮,会将用到的数据表和默认数据进行初始化,在右侧可以看到初始化的日志信息。<br />![p_2.png](https://cdn.nlark.com/yuque/0/2021/png/1309959/1637391960064-18d3b6ad-936d-4f2c-9519-8875dabd4768.png#clientId=u2258124f-8157-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=1612&id=ue3aef54d&margin=%5Bobject%20Object%5D&name=p_2.png&originHeight=1612&originWidth=2330&originalType=binary&ratio=1&rotation=0&showTitle=false&size=398839&status=done&style=shadow&taskId=u9762bf98-202c-41e5-9f24-c0e65f3db3f&title=&width=2330)<br />如上,初始化成功后,初始化的表结构 UML 图如下:<br />![p_3.png](https://cdn.nlark.com/yuque/0/2021/png/1309959/1637391977119-ae9238a1-c889-4635-b239-4c8ff97c40ab.png#clientId=u2258124f-8157-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=1926&id=u55037c03&margin=%5Bobject%20Object%5D&name=p_3.png&originHeight=1926&originWidth=1642&originalType=binary&ratio=1&rotation=0&showTitle=false&size=280118&status=done&style=shadow&taskId=ue32d0e4a-6f93-485e-b4df-d477b280159&title=&width=1642)<br />重新启动程序,会在浏览器中自动打开登录界面,链接地址:http://127.0.0.1:9999/login 。
  6. <a name="CXj3g"></a>
  7. ##
  8. <a name="rWi33"></a>
  9. ## 登录界面
  10. ![03.png](https://cdn.nlark.com/yuque/0/2021/png/1309959/1622255715233-f4f016dd-5ffb-41cd-bfd6-146ad16b5c47.png#clientId=uc5fdbb38-f2dc-4&crop=0&crop=0&crop=1&crop=1&from=drop&id=u9ac49a20&margin=%5Bobject%20Object%5D&name=03.png&originHeight=936&originWidth=974&originalType=binary&ratio=1&rotation=0&showTitle=false&size=70461&status=done&style=shadow&taskId=ue4e8f88b-7ba8-4f73-8f8c-70f0aed11b2&title=)<br />输入默认账号 admin,密码 admin 即可登录成功。
  11. <a name="W0Upr"></a>
  12. ##
  13. <a name="gvYgp"></a>
  14. ## 仪表盘界面
  15. ![p_4.png](https://cdn.nlark.com/yuque/0/2021/png/1309959/1637392064131-871ed0cc-1126-4734-aa5d-8159f5ccb58a.png#clientId=u2258124f-8157-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=1198&id=u936eafd0&margin=%5Bobject%20Object%5D&name=p_4.png&originHeight=1198&originWidth=3296&originalType=binary&ratio=1&rotation=0&showTitle=false&size=353492&status=done&style=shadow&taskId=u03a0ea92-223c-4bec-8cfd-d8042930ed2&title=&width=3296)<br />显示 项目信息、内存信息、硬盘信息、CPU信息 等。
  16. <a name="TJkE6"></a>
  17. ##
  18. <a name="rSqbx"></a>
  19. ## 配置信息 -> 告警邮箱
  20. ![05.png](https://cdn.nlark.com/yuque/0/2021/png/1309959/1622256000424-87da8fa3-41e4-4504-a2da-49dc2d79d2dd.png#clientId=uc5fdbb38-f2dc-4&crop=0&crop=0&crop=1&crop=1&from=drop&id=u7b0d1b01&margin=%5Bobject%20Object%5D&name=05.png&originHeight=1488&originWidth=3010&originalType=binary&ratio=1&rotation=0&showTitle=false&size=268971&status=done&style=shadow&taskId=u033677d8-5131-46e2-9a5e-7984aaa60b9&title=)
  21. 在这里可以配置系统告警的发件人和收件人,当系统发生 Panic 时,进行邮件通知,邮件模板如下:<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/1309959/1622256884735-111b3f41-1f86-40d0-9a3c-2440c5b2c8bb.png#clientId=uc5fdbb38-f2dc-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=1138&id=uf3b71e20&margin=%5Bobject%20Object%5D&name=image.png&originHeight=1138&originWidth=1736&originalType=binary&ratio=1&rotation=0&showTitle=false&size=105870&status=done&style=shadow&taskId=ufae534b2-f410-4a95-b95e-25de6fe3f11&title=&width=1736)
  22. <a name="zPrUa"></a>
  23. ##
  24. <a name="Jy1yL"></a>
  25. ## 配置信息 -> 错误码
  26. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/1309959/1637475330151-cecb99e7-5036-4039-9957-95b1b691e3fb.png#clientId=u3119a38c-fbfc-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=774&id=u42764b3f&margin=%5Bobject%20Object%5D&name=image.png&originHeight=774&originWidth=1107&originalType=binary&ratio=1&rotation=0&showTitle=false&size=152925&status=done&style=shadow&taskId=u7373788a-12c2-42d6-971f-23a5f34e15b&title=&width=1107)<br />展示系统中定义的错误码。
  27. <a name="KS5vb"></a>
  28. ##
  29. <a name="Qazg1"></a>
  30. ## 代码生成器 -> 生成数据表 CURD
  31. ![07.png](https://cdn.nlark.com/yuque/0/2021/png/1309959/1622256103079-83cd0b34-2578-4250-8fbf-01ebed9f6042.png#clientId=uc5fdbb38-f2dc-4&crop=0&crop=0&crop=1&crop=1&from=drop&id=u030de0a0&margin=%5Bobject%20Object%5D&name=07.png&originHeight=1594&originWidth=3008&originalType=binary&ratio=1&rotation=0&showTitle=false&size=283531&status=done&style=shadow&taskId=u54b758ac-0c02-48c0-bcc5-751f68f8b75&title=)<br />在左侧可以单选或多选数据表,进行代码生成。
  32. <a name="s5IcQ"></a>
  33. ##
  34. <a name="aFkzB"></a>
  35. ## 代码生成器 -> 生成控制器方法
  36. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/1309959/1637475399780-2cbd1377-bfda-4f95-b9eb-8bbf9f5a3c22.png#clientId=u3119a38c-fbfc-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=582&id=ucf7fe94a&margin=%5Bobject%20Object%5D&name=image.png&originHeight=582&originWidth=1377&originalType=binary&ratio=1&rotation=0&showTitle=false&size=70698&status=done&style=shadow&taskId=u73e9bfb6-0775-4fa8-907e-4b5acf9b8a0&title=&width=1377)<br />在左侧可以设置需要生成的 handler 名称。
  37. <a name="mR0yD"></a>
  38. ##
  39. <a name="KOwzV"></a>
  40. ## 授权调用方 -> 调用方
  41. ![09.png](https://cdn.nlark.com/yuque/0/2021/png/1309959/1622256168209-7ee41b4a-608b-442f-9bcc-236c6ec95ce0.png#clientId=uc5fdbb38-f2dc-4&crop=0&crop=0&crop=1&crop=1&from=drop&id=u75638be1&margin=%5Bobject%20Object%5D&name=09.png&originHeight=1132&originWidth=3016&originalType=binary&ratio=1&rotation=0&showTitle=false&size=212365&status=done&style=shadow&taskId=uf56b298c-8bb5-468d-98bd-f922cd60c01&title=)
  42. ![25.png](https://cdn.nlark.com/yuque/0/2021/png/1309959/1622256175371-e5203852-639b-41a9-97db-3293d285d416.png#clientId=uc5fdbb38-f2dc-4&crop=0&crop=0&crop=1&crop=1&from=drop&id=u7727900e&margin=%5Bobject%20Object%5D&name=25.png&originHeight=1384&originWidth=2986&originalType=binary&ratio=1&rotation=0&showTitle=false&size=262604&status=done&style=shadow&taskId=u9653fea0-8158-4207-98d5-ad58cc9a060&title=)<br />设置谁可以调用我的接口,同时还可以授权调用我哪些接口。
  43. <a name="te07B"></a>
  44. ##
  45. <a name="rp3k4"></a>
  46. ## 授权调用方 -> 使用说明
  47. ![10.png](https://cdn.nlark.com/yuque/0/2021/png/1309959/1622256215480-a375a938-2c7f-4931-905f-497c54a7a0f3.png#clientId=uc5fdbb38-f2dc-4&crop=0&crop=0&crop=1&crop=1&from=drop&id=ub077c6a8&margin=%5Bobject%20Object%5D&name=10.png&originHeight=1720&originWidth=2996&originalType=binary&ratio=1&rotation=0&showTitle=false&size=395288&status=done&style=shadow&taskId=ub97a5bdc-92f5-476f-bd63-150fc04ccdf&title=)
  48. <a name="k8qH8"></a>
  49. ##
  50. <a name="fz3M9"></a>
  51. ## 后台任务 -> 任务列表
  52. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/1309959/1630240757396-040d9299-0278-4263-a5c8-399d1d4af061.png#clientId=u5136bcdf-4e03-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=594&id=u65bd0e6f&margin=%5Bobject%20Object%5D&name=image.png&originHeight=594&originWidth=1538&originalType=binary&ratio=1&rotation=0&showTitle=false&size=84908&status=done&style=shadow&taskId=u4ecb2478-81ae-42df-a61e-20cad33216d&title=&width=1538)
  53. <a name="YkCji"></a>
  54. ##
  55. <a name="U9Tna"></a>
  56. ## 系统管理员 -> 管理员
  57. ![11.png](https://cdn.nlark.com/yuque/0/2021/png/1309959/1622256256224-57eee183-bdfa-421b-9b82-4b517cf32fe4.png#clientId=uc5fdbb38-f2dc-4&crop=0&crop=0&crop=1&crop=1&from=drop&id=u3c357997&margin=%5Bobject%20Object%5D&name=11.png&originHeight=1266&originWidth=3010&originalType=binary&ratio=1&rotation=0&showTitle=false&size=238179&status=done&style=shadow&taskId=u72c7278e-cf81-47a6-9e1c-c2d6417ed7d&title=)
  58. ![24.png](https://cdn.nlark.com/yuque/0/2021/png/1309959/1622256262260-0857d27a-8d0d-403f-9446-5ec927706631.png#clientId=uc5fdbb38-f2dc-4&crop=0&crop=0&crop=1&crop=1&from=drop&id=u0cfa203c&margin=%5Bobject%20Object%5D&name=24.png&originHeight=1484&originWidth=2986&originalType=binary&ratio=1&rotation=0&showTitle=false&size=288261&status=done&style=shadow&taskId=u56caa2cf-3f14-41e8-b420-39b2fe431fb&title=)<br />![12.png](https://cdn.nlark.com/yuque/0/2021/png/1309959/1622256271262-87fb9e0f-ae21-463b-8419-e5a46b7326b4.png#clientId=uc5fdbb38-f2dc-4&crop=0&crop=0&crop=1&crop=1&from=drop&id=u615b87e0&margin=%5Bobject%20Object%5D&name=12.png&originHeight=1748&originWidth=2998&originalType=binary&ratio=1&rotation=0&showTitle=false&size=321063&status=done&style=shadow&taskId=u0d1bd835-c208-453b-8671-4970e1e640f&title=)<br />设置谁可以登录后台,可以对其进行 禁用、重置密码、菜单授权、下线、删除 等操作。
  59. <a name="qLccQ"></a>
  60. ##
  61. <a name="bkI7U"></a>
  62. ## 系统管理员 -> 菜单管理
  63. ![13.png](https://cdn.nlark.com/yuque/0/2021/png/1309959/1622256329243-9af9298e-ef3b-4d68-ab98-9850c9541f7b.png#clientId=uc5fdbb38-f2dc-4&crop=0&crop=0&crop=1&crop=1&from=drop&id=udb1ff738&margin=%5Bobject%20Object%5D&name=13.png&originHeight=1726&originWidth=2996&originalType=binary&ratio=1&rotation=0&showTitle=false&size=410368&status=done&style=shadow&taskId=u4f562cdd-9f61-4143-a9b1-8de4efae7f8&title=)<br />设置后台侧边栏的菜单。
  64. <a name="eqgXD"></a>
  65. ##
  66. <a name="GsRdo"></a>
  67. ## 查询小助手 -> 查询缓存
  68. ![14.png](https://cdn.nlark.com/yuque/0/2021/png/1309959/1622256366369-2befe825-6a56-4f29-ae83-caca22bd488c.png#clientId=uc5fdbb38-f2dc-4&crop=0&crop=0&crop=1&crop=1&from=drop&id=u8dd4d9d1&margin=%5Bobject%20Object%5D&name=14.png&originHeight=1300&originWidth=3014&originalType=binary&ratio=1&rotation=0&showTitle=false&size=249665&status=done&style=shadow&taskId=u9e47018f-a398-4cae-9a6a-c818b64f6da&title=)<br />查询 Redis 缓存内容 和 有效期,同时还可以清空缓存。
  69. <a name="fgvgn"></a>
  70. ##
  71. <a name="SvVLA"></a>
  72. ## 查询小助手 -> 查询数据
  73. ![15.png](https://cdn.nlark.com/yuque/0/2021/png/1309959/1622256404729-85b71032-97fe-4d89-bfa8-f01815e8ab5c.png#clientId=uc5fdbb38-f2dc-4&crop=0&crop=0&crop=1&crop=1&from=drop&id=uf2ee30a8&margin=%5Bobject%20Object%5D&name=15.png&originHeight=1460&originWidth=3006&originalType=binary&ratio=1&rotation=0&showTitle=false&size=250652&status=done&style=shadow&taskId=u03718cf0-0604-4adc-838c-b7f3949fca2&title=)<br />![16.png](https://cdn.nlark.com/yuque/0/2021/png/1309959/1622256415183-6cd44f83-32d9-4e98-8a45-9c4e753ee359.png#clientId=uc5fdbb38-f2dc-4&crop=0&crop=0&crop=1&crop=1&from=drop&id=uc70773fa&margin=%5Bobject%20Object%5D&name=16.png&originHeight=1492&originWidth=3004&originalType=binary&ratio=1&rotation=0&showTitle=false&size=429979&status=done&style=shadow&taskId=ueb9ec278-9945-4691-9f22-a10d6f1f140&title=)<br />查询 MySQL 数据,支持输入 SQL 语句执行和分析。
  74. <a name="DL1v0"></a>
  75. ##
  76. <a name="ZwDkv"></a>
  77. ## 实用工具箱 -> 服务升级
  78. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/1309959/1637475541368-a3e06537-058d-4e3e-8fc6-065866bd8e41.png#clientId=u3119a38c-fbfc-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=875&id=ud4dc9d7f&margin=%5Bobject%20Object%5D&name=image.png&originHeight=875&originWidth=1477&originalType=binary&ratio=1&rotation=0&showTitle=false&size=203612&status=done&style=shadow&taskId=uabdbed23-c7ef-411b-ac4f-8394090ee37&title=&width=1477)<br />不同版本提供相应的升级指导。
  79. <a name="Hd4aR"></a>
  80. ##
  81. <a name="MovZn"></a>
  82. ## 实用工具箱 -> Hashids
  83. ![18.png](https://cdn.nlark.com/yuque/0/2021/png/1309959/1622256538614-17226804-7f1f-4f0c-b3af-362bcf4871af.png#clientId=uc5fdbb38-f2dc-4&crop=0&crop=0&crop=1&crop=1&from=drop&id=u423d9841&margin=%5Bobject%20Object%5D&name=18.png&originHeight=1530&originWidth=3010&originalType=binary&ratio=1&rotation=0&showTitle=false&size=245443&status=done&style=shadow&taskId=uccbe13d5-9d70-4845-bf35-10f2a2afe76&title=)<br />程序中对传递 id 的场景,均使用密文进行传递。
  84. <a name="E97qq"></a>
  85. ##
  86. <a name="JtuA8"></a>
  87. ## 实用工具箱 -> 调用日志
  88. ![19.png](https://cdn.nlark.com/yuque/0/2021/png/1309959/1622256612068-c3a03135-0173-4e51-97e9-7b927ce91430.png#clientId=uc5fdbb38-f2dc-4&crop=0&crop=0&crop=1&crop=1&from=drop&id=ub1baeaa0&margin=%5Bobject%20Object%5D&name=19.png&originHeight=1722&originWidth=2998&originalType=binary&ratio=1&rotation=0&showTitle=false&size=487455&status=done&style=shadow&taskId=u05f0dae5-d642-498f-8c0f-661aaa0cd8d&title=)<br />展示最新的 100 条调用日志。
  89. <a name="lpnDu"></a>
  90. ##
  91. <a name="yyuq2"></a>
  92. ## 实用工具箱 -> 接口文档
  93. ![20.png](https://cdn.nlark.com/yuque/0/2021/png/1309959/1622256645196-d32c316e-4603-4a14-a8d6-48f07170c4f0.png#clientId=uc5fdbb38-f2dc-4&crop=0&crop=0&crop=1&crop=1&from=drop&id=ud69a5d67&margin=%5Bobject%20Object%5D&name=20.png&originHeight=1718&originWidth=2998&originalType=binary&ratio=1&rotation=0&showTitle=false&size=370733&status=done&style=shadow&taskId=ubdf6b2d0-278e-49ba-b647-927fcb9c3f7&title=)
  94. <a name="Uyl8g"></a>
  95. ##
  96. <a name="vu0N5"></a>
  97. ## 实用工具箱 -> GraphQL
  98. ![21.png](https://cdn.nlark.com/yuque/0/2021/png/1309959/1622256666879-658b8fea-fd1d-4495-b1cb-893010d73a08.png#clientId=uc5fdbb38-f2dc-4&crop=0&crop=0&crop=1&crop=1&from=drop&id=uf4768157&margin=%5Bobject%20Object%5D&name=21.png&originHeight=1720&originWidth=3014&originalType=binary&ratio=1&rotation=0&showTitle=false&size=285582&status=done&style=shadow&taskId=u043dbc58-9b76-4118-a995-d82b481dfce&title=)
  99. <a name="gqPnu"></a>
  100. ### 查询操作
  101. ```json
  102. query {
  103. bySex(sex: "男") {
  104. id
  105. name
  106. sex
  107. mobile
  108. }
  109. }

更新操作

  1. mutation {
  2. updateUserMobile(data: {id: "1", mobile: "13299999999"}) {
  3. id
  4. name
  5. sex
  6. mobile
  7. }
  8. }

实用工具箱 -> 接口指标

22.png
根据指标可以在 Grafana 生成类似的指标图。
26.png
27.png

实用工具箱 -> WebSocket

websocket.png

其他

代码生成工具 -> 生成数据表 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

  1. {
  2. "timestamp": "2021-06-26T16:33:46.891484+08:00",
  3. "environment": "fat",
  4. "host": "127.0.0.1:9999",
  5. "status": "ok"
  6. }

请作者喝咖啡

image.png

联系作者

cwiLQ13CRgJIS86.jpg