Go - 一个对新手很友好的项目(带界面)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
可观测监控 Prometheus 版,每月50GB免费额度
简介: 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 设置为测试环境

首先进入到服务初始化界面。

接下来填写 MySQLRedis 配置信息,填写完成后,点击初始化按钮。

bd405b15de6b3cc7f04327c8f52ffa11.png

如上图所示,表示服务初始化成功,需要再重新启动服务,服务启动后就会看到登录界面。

056d09b19d29c556248a865889778168.png

使用默认用户信息:adminadmin 登录即可,登录成功后就会看到仪表盘界面。

7efe38a73eeb7f509240821931e56263.png

已集成哪些功能?

Panic 时邮件告警通知

在后台可配置邮件发件人信息,如下图所示:

ce631b00b2c5b65120e9169cc778c694.png

邮件模板如下:

8dc8c610b9e9f6b8d9f0ebebc5738be0.png

接口鉴权

在后台可设置调用方 KEY、调用方 SECRET、调用方对接人、备注等信息。

cae0ab2421e02f55f7656939ed951a4f.png

27a48179cbbe73824bdb8da5d023bc9f.png

将创建的调用方的 KEY、SECRET 发给调用方即可,可以对调用方进行 启用/禁用/删除 等操作,还可以对其授权可访问的接口。

b9590fcd0cef012b0bce8c56596161c3.png

接口鉴权是基于 HTTP Header 中的两个参数 AuthorizationAuthorization-Date 存储签名信息,代码中提供了 3 种语言的加密算法:GoPHPJS

3638492b70710a8fec57831962c09774.png

代码生成工具

cc3dad22dc894296f70d6775c1feb401.png

gormgen,基于数据表生成三个文件,以 admin 表为例会生成:gen_table.md 表注释的 MD 文档、gen_model.go 表字段的结构体、gen_admin.go 表 CURD 操作代码。

意义:在进行业务需求开发时,创建完数据表后,执行代码生成工具,常用的 CURD 操作全部生成完毕,使用的时候只需要 . 后面的方法即可,这样大大提高了业务开发效率。

281469e4a5e3d37e32315bff644f6c71.png

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 信息 串起来,记录到日志中。

ca03212fc8dd7822257656a710f8bb02.png

点击某一行可查看日志详情。

接口文档

通过 handlergen 生成的代码,自带接口文档。

e7780940f2567869bea1adb010c960e5.png

接口指标

项目中使用 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

类似效果:

a34069f142fc1efb45bc3b228fabf02e.png

ac938805581de85c61a6eb5e7fc250e1.png

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

如果您有好的想法和建议,欢迎加好友交流。


相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
目录
相关文章
|
4月前
|
JSON 运维 Go
Go 项目配置文件的定义和读取
Go 项目配置文件的定义和读取
|
15天前
|
JSON Go 开发者
go-carbon v2.5.0 发布,轻量级、语义化、对开发者友好的 golang 时间处理库
carbon 是一个轻量级、语义化、对开发者友好的 Golang 时间处理库,提供了对时间穿越、时间差值、时间极值、时间判断、星座、星座、农历、儒略日 / 简化儒略日、波斯历 / 伊朗历的支持。
32 4
|
2月前
|
SQL 关系型数据库 MySQL
Go语言项目高效对接SQL数据库:实践技巧与方法
在Go语言项目中,与SQL数据库进行对接是一项基础且重要的任务
83 11
|
2月前
|
Go
使用go语言将A助手加入项目中
使用go语言将A助手加入项目中
24 2
|
2月前
|
存储 Kubernetes Go
Go语言项目组织架构
Go语言项目组织架构
|
4月前
|
JSON 中间件 Go
go语言后端开发学习(四) —— 在go项目中使用Zap日志库
本文详细介绍了如何在Go项目中集成并配置Zap日志库。首先通过`go get -u go.uber.org/zap`命令安装Zap,接着展示了`Logger`与`Sugared Logger`两种日志记录器的基本用法。随后深入探讨了Zap的高级配置,包括如何将日志输出至文件、调整时间格式、记录调用者信息以及日志分割等。最后,文章演示了如何在gin框架中集成Zap,通过自定义中间件实现了日志记录和异常恢复功能。通过这些步骤,读者可以掌握Zap在实际项目中的应用与定制方法
151 1
go语言后端开发学习(四) —— 在go项目中使用Zap日志库
|
4月前
|
API
企业项目迁移go-zero实战(二)
企业项目迁移go-zero实战(二)
|
4月前
|
JSON 缓存 监控
go语言后端开发学习(五)——如何在项目中使用Viper来配置环境
Viper 是一个强大的 Go 语言配置管理库,适用于各类应用,包括 Twelve-Factor Apps。相比仅支持 `.ini` 格式的 `go-ini`,Viper 支持更多配置格式如 JSON、TOML、YAML
go语言后端开发学习(五)——如何在项目中使用Viper来配置环境
|
4月前
|
算法 程序员 编译器
Go deadcode:查找没意义的死代码,对于维护项目挺有用!
Go deadcode:查找没意义的死代码,对于维护项目挺有用!
|
4月前
|
缓存 JavaScript 前端开发
为开源项目 go-gin-api 增加 WebSocket 模块
为开源项目 go-gin-api 增加 WebSocket 模块
49 2