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
如果您有好的想法和建议,欢迎加好友交流。
- MVVM项目实战之路-搭建一个登录界面
- 手把手搭建一个完整的javaweb项目(适合新手)
- 一个新手程序员的项目经验
- 来自大学生投稿:一个适合新手上手的商城项目
- 【Android】 分享一个完整的项目,适合新手!
- 如何使用jQuery UI的sortable组件做一个更为友好的界面(下)
- MVVM项目实战之路-搭建一个登录界面
- 【新手】开启一个vue项目
- 手把手搭建一个完整的javaweb项目(适合新手)
- 分享一个源码下载网站,天气预报项目源码,比较适合新手学习
- 一个特别适合新手练习的Android小项目——每日一妹纸
- MVVM项目实战之路-搭建一个登录界面
- ExtJS做的一个信息管理界面,项目代码
- 手把手搭建一个完整的SSH项目(适合新手)
- 试过 Hello World 后的新手程序员想要搞一个大项目
- MVVM项目实战之路-搭建一个登录界面
- 在 Soui 中嵌入 MiniBlink 初体验(三):实现一个界面友好动态可交互的饼图
- 一个比较酷的项目界面分享,干货十足
- artDialog是一个基于javascript编写的对话框组件,它拥有精致的界面与友好的接口
- 一个想法照进现实-《IT连》创业项目:创业时该不该用新手程序员