go mysql demo,go_demo

该博客介绍了如何使用 Gin 框架搭建具备日志记录、错误处理、多语言支持和 Swagger 文档功能的企业级 Web 应用。内容包括请求链路日志打印、数据库操作、参数绑定与验证,以及如何生成 API 文档。
摘要由CSDN通过智能技术生成

Table of Contents generated with DocToc

gin_scaffold

Gin best practices, gin development scaffolding, too late to explain, get on the bus.

使用gin构建了企业级脚手架,代码简洁易读,可快速进行高效web开发。

主要功能有:

请求链路日志打印,涵盖mysql/redis/request

支持多语言错误信息提示及自定义错误提示。

支持了多配置环境

封装了 log/redis/mysql/http.client 常用方法

支持swagger文档生成

现在开始

安装软件依赖

go mod使用请查阅:

git clone git@github.com:e421083458/gin_scaffold.git

cd gin_scaffold

go mod tidy

确保正确配置了 conf/mysql_map.toml、conf/redis_map.toml:

运行脚本

go run main.go

➜ gin_scaffold git:(master) ✗ go run main.go

------------------------------------------------------------------------

[INFO] config=./conf/dev/

[INFO] start loading resources.

[INFO] success loading resources.

------------------------------------------------------------------------

[GIN-debug] [WARNING] Now Gin requires Go 1.6 or later and Go 1.7 will be required soon.

[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.

[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.

- using env:export GIN_MODE=release

- using code:gin.SetMode(gin.ReleaseMode)

[GIN-debug] GET /demo/index --> github.com/e421083458/go_gateway_demo/controller.(*Demo).Index-fm (6 handlers)

[GIN-debug] GET /demo/bind --> github.com/e421083458/go_gateway_demo/controller.(*Demo).Bind-fm (6 handlers)

[GIN-debug] GET /demo/dao --> github.com/e421083458/go_gateway_demo/controller.(*Demo).Dao-fm (6 handlers)

[GIN-debug] GET /demo/redis --> github.com/e421083458/go_gateway_demo/controller.(*Demo).Redis-fm (6 handlers)

[INFO] HttpServerRun::8880

测试mysql与请求链路

创建测试表:

CREATE TABLE `area` (

`id` bigint(20) NOT NULL AUTO_INCREMENT,

`area_name` varchar(255) NOT NULL,

`city_id` int(11) NOT NULL,

`user_id` int(11) NOT NULL,

`update_at` datetime NOT NULL,

`create_at` datetime NOT NULL,

`delete_at` datetime NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='area';

INSERT INTO `area` (`id`, `area_name`, `city_id`, `user_id`, `update_at`, `create_at`, `delete_at`) VALUES (NULL, 'area_name', '1', '2', '2019-06-15 00:00:00', '2019-06-15 00:00:00', '2019-06-15 00:00:00');

curl 'http://127.0.0.1:8880/demo/dao?id=1'

{

"errno": 0,

"errmsg": "",

"data": "[{\"id\":1,\"area_name\":\"area_name\",\"city_id\":1,\"user_id\":2,\"update_at\":\"2019-06-15T00:00:00+08:00\",\"create_at\":\"2019-06-15T00:00:00+08:00\",\"delete_at\":\"2019-06-15T00:00:00+08:00\"}]",

"trace_id": "c0a8fe445d05b9eeee780f9f5a8581b0"

}

查看链路日志(确认是不是一次请求查询,都带有相同trace_id):

tail -f gin_scaffold.inf.log

[INFO][2019-06-16T11:39:26.802][log.go:58] _com_request_in||method=GET||from=127.0.0.1||traceid=c0a8fe445d05b9eeee780f9f5a8581b0||cspanid=||uri=/demo/dao?id=1||args=map[]||body=||spanid=9dad47aa57e9d186

[INFO][2019-06-16T11:39:26.802][log.go:58] _com_mysql_success||affected_row=1||traceid=c0a8fe445d05b9ee07b80f9f66cb39b0||spanid=9dad47aa1408d2ac||source=/Users/niuyufu/go/src/github.com/e421083458/go_gateway_demo/dao/demo.go:24||proc_time=0.000000000||sql=SELECT * FROM `area` WHERE (id = '1')||level=sql||current_time=2019-06-16 11:39:26||cspanid=

[INFO][2019-06-16T11:39:26.802][log.go:58] _com_request_out||method=GET||args=map[]||proc_time=0.025019164||traceid=c0a8fe445d05b9eeee780f9f5a8581b0||spanid=9dad47aa57e9d186||uri=/demo/dao?id=1||from=127.0.0.1||response={\"errno\":0,\"errmsg\":\"\",\"data\":\"[{\\\"id\\\":1,\\\"area_name\\\":\\\"area_name\\\",\\\"city_id\\\":1,\\\"user_id\\\":2,\\\"update_at\\\":\\\"2019-06-15T00:00:00+08:00\\\",\\\"create_at\\\":\\\"2019-06-15T00:00:00+08:00\\\",\\\"delete_at\\\":\\\"2019-06-15T00:00:00+08:00\\\"}]\",\"trace_id\":\"c0a8fe445d05b9eeee780f9f5a8581b0\"}||cspanid=

测试参数绑定与多语言验证

curl 'http://127.0.0.1:8880/demo/bind?name=name&locale=zh'

{

"errno": 500,

"errmsg": "年龄为必填字段,密码为必填字段",

"data": "",

"trace_id": "c0a8fe445d05badae8c00f9fb62158b0"

}

curl 'http://127.0.0.1:8880/demo/bind?name=name&locale=en'

{

"errno": 500,

"errmsg": "Age is a required field,Passwd is a required field",

"data": "",

"trace_id": "c0a8fe445d05bb4cd3b00f9f3a768bb0"

}

文件分层

├── README.md

├── conf 配置文件夹

│ └── dev

│ ├── base.toml

│ ├── mysql_map.toml

│ └── redis_map.toml

├── controller 控制器

│ └── demo.go

├── dao DB数据层

│ └── demo.go

├── docs swagger文件层

├── dto 输入输出结构层

│ └── demo.go

├── go.mod

├── go.sum

├── main.go 入口文件

├── middleware 中间件层

│ ├── panic.go

│ ├── response.go

│ ├── token_auth.go

│ └── translation.go

├── public 公共文件

│ ├── log.go

│ ├── mysql.go

│ └── validate.go

└── router 路由层

├── httpserver.go

└── route.go

log / redis / mysql / http.client 常用方法

swagger文档生成

下载对应操作系统的执行文件到$GOPATH/bin下面

如下:

➜ gin_scaffold git:(master) ✗ ll -r $GOPATH/bin

total 434168

-rwxr-xr-x 1 niuyufu staff 13M 4 3 17:38 swag

设置接口文档参考: controller/demo.go 的 Bind方法的注释设置

// ListPage godoc

// @Summary 测试数据绑定

// @Description 测试数据绑定

// @Tags 用户

// @ID /demo/bind

// @Accept json

// @Produce json

// @Param polygon body dto.DemoInput true "body"

// @Success 200 {object} middleware.Response{data=dto.DemoInput} "success"

// @Router /demo/bind [post]

生成接口文档:swag init

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值