2466dfcbfca39c5a4d11b1c9e4737585c0f25095
go-gin-api 
基于 Gin 进行模块化设计的 API 框架,封装了常用的功能,使用简单,致力于进行快速的业务研发,同时增加了更多限制,以约束项目组开发成员、规避混乱无序和自由随意。
查看 Jaeger 链路追踪代码,请查看 v1.0版,文档点这里 jaeger.md 。
供参考学习,线上使用请谨慎!
持续更新...
Star Module
亮点功能:⭐ [trace] 开发调试的辅助工具。
可记录如下信息:
- trace_id,当前请求的唯一ID
- request,当前请求的请求信息
- response,当前请求的返回信息
- third_party_requests,当前请求涉及到调用第三方的信息
- debugs,当前请求的调试信息
- sqls,当前请求执行的 sql 信息
- success,当前请求结果
- cost_seconds,执行时长,单位秒
Catalogue
├── cmd # 项目入口文件,api/main.go 为启动 HTTP API 服务
├── configs # 配置文件统一存放目录
├── docs # Swagger 文档,执行 swag init 生成的
├── init # 项目初始脚本,比如初始化 SQL 语句
├── internal # 业务目录
│ ├── api # 业务代码
│ ├── core # 脚本代码
│ ├── pkg # 内部使用的 package
├── logs # 存放日志的目录
└── pkg # 一些封装好的 package
Features
- 包管理工具 Go Modules
- Gin 支持优雅关闭
- 配置文件解析库 Viper
- 文档使用 Swagger 生成
- 性能分析使用 pprof
- zap 日志记录
- rate 限流
- [token] 基于JWT 身份认证
- [notify] 异常捕获并进行邮件告警
- [trace] 开发调试的辅助工具
- 支持设置 trace_id
- 支持设置 request 信息
- 支持设置 response 信息
- 支持设置 third_party_requests 三方请求信息
- 支持设置 debugs 打印调试信息
- 支持设置 sqls 执行 SQL 信息
- 可记录 cost_seconds 执行时长
- [errno] 统一定义错误码
- [env] 支持 FAT、UAT、PRO 环境
- [aes] AES 对称加密
- 支持密码分组链模式(CBC)
- [rsa] RSA 非对称加密
- 数据库组件使用 GORM V2
- 自带连接池
- Redis 组件使用 go-redis
- 自带连接池
- MongoDB
- 使用 Prometheus Client
- 已设置计数器(Counter)指标
- 已设置直方图(Histogram)指标
- 任务调度
- gRPC
- ID 生成器
- [httpclient] HTTP 请求包
- 支持设置 TTL 一次请求的最长执行时间
- 支持设置 Header 信息
- 支持设置 Trace 信息
- 支持设置 Logger 信息
- 支持设置 Mock 数据
- 支持设置 OnFailedAlarm 失败
- 可设置 alarmTitle 告警标题
- 可设置 alarmObject 告警方式(邮件/短信/微信)
- 可设置 alarmVerify 定义符合告警的验证规则
- 支持设置 OnFailedRetry 失败重试
- 可设置 retryTimes 重试次数
- 可设置 retryDelay 重试前延迟等待时间
- 可设置 retryVerify 定义符合重试的验证规则
Quick start
Requirements
- Go version >= 1.15
- Global environment configure (Linux/Mac)
export GO111MODULE=on
export GOPROXY=https://goproxy.io
Environment
-env fat
// dev 开发环境
// fat 测试环境[默认]
// uat 预发布环境
// pro 正式环境
Configs
配置文件目录:./configs,根据不同的环境变量使用不同的配置文件。
项目启动时,需配置如下配置:
- MySQL 配置,主、从和基础项;
- Redis 配置;
- Mail 配置;
Init
项目初始化目录:./init。
- db/tables.sql,初始化 MySQL 表结构;
Build & Run
cd go-gin-api/cmd/api
go run main.go -env fat
██████╗ ██████╗ ██████╗ ██╗███╗ ██╗ █████╗ ██████╗ ██╗
██╔════╝ ██╔═══██╗ ██╔════╝ ██║████╗ ██║ ██╔══██╗██╔══██╗██║
██║ ███╗██║ ██║█████╗██║ ███╗██║██╔██╗ ██║█████╗███████║██████╔╝██║
██║ ██║██║ ██║╚════╝██║ ██║██║██║╚██╗██║╚════╝██╔══██║██╔═══╝ ██║
╚██████╔╝╚██████╔╝ ╚██████╔╝██║██║ ╚████║ ██║ ██║██║ ██║
╚═════╝ ╚═════╝ ╚═════╝ ╚═╝╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝
* [register -env fat]
* [register cors]
* [register rate]
* [register panic notify]
* [register pprof]
* [register swagger]
* [register prometheus]
// 启动成功后,可访问:http://127.0.0.1:9999/h/info
swagger
http://127.0.0.1:9999/swagger/index.html
// 生成文档
$ go get -u github.com/swaggo/swag/cmd/swag
$ swag init
pprof
http://127.0.0.1:9999/debug/pprof
说明文档:
// 查看 CPU 信息
go tool pprof 127.0.0.1:9999/debug/pprof/profile
...
(pprof)
//输入 web,生成 svg 文件。
//输入 png,生成 png 文件。
//输入 top,查看排名前 20 的信息。
//查看更多命令,请执行 pprof help。
其他同理,比如:
// 查看 内存 信息
go tool pprof 127.0.0.1:9999/debug/pprof/heap
// 查看 协程 信息
go tool pprof 127.0.0.1:9999/debug/pprof/goroutine
// 查看 锁 信息
go tool pprof 127.0.0.1:9999/debug/pprof/mutex
如果还想查看火焰图,请执行如下命令:
// 1.下载 pprof 工具
go get -u github.com/google/pprof
// 2.启动可视化界面
pprof -http=:9998 xxx.cpu.prof
// 3.查看可视化界面
http://127.0.0.1:9998/ui/
Special Thanks
Learning together
Description
Languages
Go
59.8%
HTML
29.8%
JavaScript
10%
Batchfile
0.2%
Shell
0.1%
Other
0.1%
