/egin

gin的快速应用脚手架

Primary LanguageGo

Go学习实践

本项目作为Go入门的实践项目, 将基于Gin框架完成一些封装. 最终目标实现一个配置化的,能够快速上手的, 规范目录结构的脚手架.

  1. GO安装 这里
  2. Go编程基础(视频) 这里
  3. GOWeb基础(视频) 这里
  4. 入门指南(文档) 这里
  5. Go语言圣经(文档) 这里

目录结构定义

./
├── README.md
├── app.json 运行时配置
├── config 启动性配置
│   ├── middlewares.go
│   ├── routes
│   │   └── user.go
│   └── routes.go
├── consumer 消费者
│   └── rabbmitmq_exmaple.go mq样例
├── controller 控制器
│   └── user.go
├── docs 文档
│   ├── consul.md
│   └── grafana-prometheus.md
├── go.mod 类目 composer.json
├── go.sum 类似 composer.lock
├── main.go 项目入口
├── model 数据模型
│   ├── common_config.go
│   └── user.go
├── pkg 脚手架-业务无关
│   ├── bootstrap.go 启动入口
│   ├── cache 缓存
│   │   ├── db.go
│   │   ├── hook.go
│   │   └── redis.go
│   ├── consts 常量
│   │   └── code.go 系统错误码及信息
│   ├── db mysql-model
│   │   ├── db.go db链接
│   │   ├── model.go 模型 crud
│   │   ├── sql.go sql构造
│   │   └── sql_test.go
│   ├── lib 通用类库
│   │   ├── func.go
│   │   ├── http.go
│   │   └── string.go
│   ├── middleware gin中间件
│   │   ├── auth.go 鉴权中间件 IpAuth/AKSK...
│   │   ├── jwt.go
│   │   ├── logger.go http请求日志
│   │   └── prometheus.go http请求打点
│   ├── route 路由处理
│   │   └── route.go
│   └── utils 辅助工具
│       ├── config.go 配置信息 local + app.json + consul
│       ├── consul.go consul client
│       ├── jwt.go
│       ├── logger.go 日志
│       ├── rabbitmq.go mq常用方法
│       └── validator.go 验证器的初始化
├── service 业务服务

Go的安装

查看

实践

我们将在一个通用脚手架的封装过程中不断学习GO语言.

路由的配置化注册

我们将在 conf/routes.go 中集中定义项目路由, 项目启动时统一注册到Gin框架中

  • conf/routes.go 基础路由定义
  • conf/routes/**.go 多文件定义

配置的管理

  • pkg/utils/config.go env,json等配置方式的支持

日志

  • pkg/utils/logger.go 基于logrus的日志管理, 标准输出/文件(分割)
  • 日志输出到 es/mongo/redis

控制器的封装

基于单一数据模型的CRUD通用控制器方法

  • 底层通用方法

数据模型的封装

基于单表的CRUD方法

  • pkg/db/model.go 连接池
  • pkg/db/model.go crud 方法封装

数据验证

  • 验证器
  • 接口参数合法性自动验证

权限验证

  • JWT
  • AKSK

缓存

  • redis的基础封装
  • 全量方法完善

健康控制

  • 接口频率控制
    • 基于滑动窗口的频率限制
    • ip维度
    • 用户维度
  • prometheus打点
    • api打点
    • db数据打点
    • redis打点

微服务

  • grpc

其他

  • consul
  • 基于consul的配置中心
  • 开关服务
  • 规则引擎
  • RabbitMQ
  • kafka
  • nsq
  • 事件总线
  • 配置解密
  • swagger

参考资料

常用命令

以下命令均在项目根目录执行

go run main.go
go test -v ./pkg/db
godoc -http=:8888
air

如何参与

go get github.com/daodao97/egin
cd $GOPATH/src/github.com/daodao97/egin
goland . #编辑器打开  vscode .
air #开发模式启动

规划

当功能逐步完善稳定后 pkg 目录下的公用库将独立成为一个 go package, 方便在任意项目中复用

常见问题