Go - 一个对新手很友好的项目(带界面)
这个开源项目就是:go-gin-api
,目前 800+ Star。
go-gin-api
是基于 Gin 进行模块化设计的 API 框架,封装了常用的功能,使用简单,致力于进行快速的业务研发,同时增加了更多限制,约束项目组开发成员,规避混乱无序及自由随意的编码。
下载后可直接运行
$ git clone https://github.com/xinliangnote/go-gin-api
$ cd go-gin-api
$ go run main.go -env fat // -env fat 设置为测试环境
首先进入到服务初始化界面。
接下来填写 MySQL
、Redis
配置信息,填写完成后,点击初始化按钮。
如上图所示,表示服务初始化成功,需要再重新启动服务,服务启动后就会看到登录界面。
使用默认用户信息:admin
,admin
登录即可,登录成功后就会看到仪表盘界面。
已集成哪些功能?
Panic 时邮件告警通知
在后台可配置邮件发件人信息,如下图所示:
邮件模板如下:
接口鉴权
在后台可设置调用方 KEY、调用方 SECRET、调用方对接人、备注等信息。
将创建的调用方的 KEY、SECRET 发给调用方即可,可以对调用方进行 启用/禁用/删除 等操作,还可以对其授权可访问的接口。
接口鉴权是基于 HTTP Header 中的两个参数 Authorization
、Authorization-Date
存储签名信息,代码中提供了 3 种语言的加密算法:Go
、PHP
、JS
。
代码生成工具
gormgen
,基于数据表生成三个文件,以 admin
表为例会生成:gen_table.md
表注释的 MD 文档、gen_model.go
表字段的结构体、gen_admin.go
表 CURD 操作代码。
意义:在进行业务需求开发时,创建完数据表后,执行代码生成工具,常用的 CURD 操作全部生成完毕,使用的时候只需要 . 后面的方法即可,这样大大提高了业务开发效率。
handlergen
,基于定义的 Handler
文件中 type interface{}
中接口方法,进行生成文件。
例如,定义的方法为:
// Login 管理员登录
// @Tags API.admin
// @Router /api/admin/login [post]
Login() core.HandlerFunc
生成后的方法为:
type loginRequest struct {
}
type loginResponse struct {
}
// Login 管理员登录
// @Summary 管理员登录
// @Description 管理员登录
// @Tags API.admin
// @Accept multipart/form-data
// @Produce json
// @Success 200 {object} loginResponse
// @Failure 400 {object} code.Failure
// @Router /api/admin/login [post]
func (h *handler) Login() core.HandlerFunc {
return func(c core.Context) {
}
}
意义:本次需求的研发负责人通过定义 type interface{}
的方式,定义出需要开发的方法,执行代码生成工具,每个方法的空实现都会生成在一个单独的文件中,开发人员只需去实现各自方法即可,便于进行分工和代码管理。
接口日志
通过 链路 ID
可以将 请求信息
、响应信息
、调用第三方 HTTP 接口的信息
、调用第三方 gRPC 接口的信息
、调试信息
、执行的 SQL 信息
、执行的 Redis 信息
串起来,记录到日志中。
点击某一行可查看日志详情。
接口文档
通过 handlergen
生成的代码,自带接口文档。
接口指标
项目中使用 prometheus
进行指标收集,项目中默认开启 metrics 记录,可以通过 http://127.0.0.1:9999/metrics 即可查看。
GraphQL
项目中使用 gqlgen
实现了 GraphQL 查询,会发现与 gqlgen init 初始化的 demo 不同,是因为代码已经集成到 go-gin-api 中,比如集成了项目 core 包中的 链路、日志 等。
目前仅实现了 Demo, resolver 使用的是模拟数据,不过使用可复用的 service 也已经实现了,在代码已注释,感兴趣的可以深入研究。
Prometheus
启动 Prometheus
的配置文件,可参考:
./deploy/prometheus/prometheus.yml
类似效果:
Loki
Loki
是一个水平可扩展,高可用性,多租户的日志聚合系统,有兴趣可以研究一下。
启用 Loki
的配置文件,可参考:
./deploy/loki/loki.yaml ./deploy/loki/promtail.yaml
已使用哪些组件?
支持 rate 接口限流 支持 panic 异常时邮件通知 支持 cors 接口跨域 支持 Prometheus 指标记录 支持 Swagger 接口文档生成 支持 GraphQL 查询语言 支持 trace 项目内部链路追踪 支持 pprof 性能剖析 支持 jwt 接口鉴权 支持 errno 统一定义错误码 支持 zap 日志收集 支持 viper 配置文件解析 支持 gorm 数据库组件 支持 go-redis 组件 支持 RESTful API 返回值规范 支持 gormgen、handlergen 代码生成工具 支持 web 界面,使用的 Light Year Admin 模板
项目地址
源码地址
https://github.com/xinliangnote/go-gin-api
在线文档
https://www.yuque.com/xinliangnote/go-gin-api/ngc3x5
推荐阅读