本项目作为Go
入门的实践项目, 将基于Gin
框架完成一些封装. 最终目标实现一个配置化的
,能够快速上手的
, 规范目录结构的
脚手架.
./
├── 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语言.
我们将在 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
- GoProxy解决安装慢
- database/sql资料
- go/tools-github
- go/tools简明介绍
- go/test详解
- go/mod包管理
- go/doc项目文档
- go/generate代码生成
- gin文档
- Gin-github
- gorm文档
- Spew变量打印
- fresh项目热重启
- air热重启-推荐
- logrus日志
- 如何避免用动态语言的思维写Go代码
- Gin中间件详解
- 数据验证
- validator
- Go 语言设计与实现
- Go by Example
- mac/ab压测
- prometheus
- macRabbitMQ
以下命令均在项目根目录执行
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
, 方便在任意项目中复用
-
dial tcp 127.0.0.1:8080: socket: too many open files
-
db查询中的内存泄露问题