# gin-wheel **Repository Path**: wang-hao-gitee/gin-wheel ## Basic Information - **Project Name**: gin-wheel - **Description**: 基于go语言gin框架的web项目骨架,专注于API端的业务场景,其目的主要在于将web项目主线逻辑梳理清晰,最基础的东西封装完善,开发者更多关注属于自己的的业务即可 - **Primary Language**: Go - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 9 - **Forks**: 2 - **Created**: 2021-07-08 - **Last Updated**: 2025-05-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: Gin, Go语言 ## README # gin-wheel #### 介绍 基于go语言gin框架的web项目骨架,专注于前后端分离的业务场景,其目的主要在于将web项目主线逻辑梳理清晰,最基础的东西封装完善,开发者更多关注属于自己的的业务即可。 #### 软件架构 C/S #### 安装教程 1. 安装的go语言版本最好>=1.15,只为更好的支持 `go module` 包管理. 2. 配置go包的代理, go env -w GO111MODULE=on go env -w GOPROXY=https://goproxy.cn,direct 3. 下载本项目依赖库 cd到根目录执行 go mod tidy 4. 初始化数据库 找到`database/init.sql`导入数据库,自行配置账号、密码、端口等。 5. 在根目录执行`go run cmd/api/main.go`,首次会自动下载依赖, 片刻后即可启动. #### 目录说明 1. app, 业务相关代码,拆分出5个目录 * dao: 数据库操作相关 * middleware: 中间件 项目中封装了 access_log 和 recovery * models: 模型层 * routers: 路由层 * service: 服务层 2. cmd,初始化相关 * api: 启动命令 * init: 初始化全局变量 3. configs, 配置文件相关 4. database, 放置了初始化mysql数据库的文件 5. global, 全局变量 6. jobs, 定时任务 7. pkg, 可以复用的相关代码 * app: form表单验证,jwttoken相关,response封装 * errcode: 业务代码返回错误code * setting: 配置文件读取的代码 使用了viper库 * util: 工具函数 * validator: 验证和翻译库 * logs: 封装的zap库 * mysql: gorm封装 * redis: redis线程池封装 #### 开发常用模块 1. 日志 - 使用Zap和file-rotatelogs实现,写入了全局变量 ```go gloabal.ZapLog.info/warn/eror(字符串) ``` 2. gorm - 支持多数据源,需要在配置文件中配置上数据源,如果只有一个那就配置一个 ```go global.MysqlConnMaps[配置名称] 配置名需要与配置文件中写的一致 ``` 3. redis - 在全局变量中已经加入了redis连接池,使用时候需要创建连接客户端 - 下面是一个读取key的案例 ```go redisClient := pkg.GetOneRedisClient() defer redisClient.ReleaseOneRedisClient() res, err := redisClient.Execute("GET", "FOO") if err != nil { panic(err) } ``` 4. 表单验证器 - 使用validator库和translation库 - 下面是使用例子 ```go param := service.RegisterRequest{} response := app.NewResponse(ctx) valid, errs := app.BindAndValid(ctx, ¶m) if !valid { } ``` 5. 验证码-使用步骤 * 获取验证码ID等信息 ```go # get 方式请求获取验证ID等信息 http://127.0.0.1:20201/api/v1/captcha/generate 返回值中携带了获取验证码图片的id ``` * 获取验证码 ``` go 根据步骤1中返回值提示获取 验证码ID http://127.0.0.1:20201/api/v1/captcha/验证码ID.png ``` * 校验验证码 ``` go 根据步骤1中返回值提示进行校验验证即可 http://127.0.0.1:20201/api/v1/captcha/验证码ID/验证码正确值 ``` 6. 雪花算法 * 相关配置 config>config.yml 配置项 SnowFlakeMachineId , 如果本项目同时部署在多台机器,并且需要同时使用该算法,请为每一台机器设置不同的ID,区间范围: [0,1023] * 随时随地,您可以非常方便的获取一个分布式场景的唯一ID ```go var snowflakeObj = pkg.CreateSnowflake() id = snowflakeObj.GetId() ``` 7. rabbitmq * 本项目中已经集成了五种模式 - 单向队列模式 项目中的hello_world - work模式 一个生产者对应多个消费者,但是一条消息只能有一个消费者获得消息 - 发布/订阅模式 一个消费者将消息首先发送到交换器,交换器绑定到多个队列,然后被监听该队列的消费者所接收并消费 - 路由模式 生产者将消息发送到direct交换器,在绑定队列和交换器的时候有一个路由key,生产者发送的消息会指定一个路由key,那么消息只会发送到相应key相同的队列,接着监听该队列的消费者消费消息 - Topic模式 跟路由模式一样,多了支持通配符 符号“#”表示匹配一个或多个词,符号“*”表示匹配一个词 * 如何使用这些队列 - 在根目录/test/rabbitmq_test.go中有所有模式的实现例子 #### 并发测试 使用的1核2G腾讯云服务器,并发(Qps)可以达到7K+,所有请求100%成功! ![Image description](https://images.gitee.com/uploads/images/2021/0726/224353_a3b10c52_9087480.png "并发测试.png") #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)