Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何在gin中获取响应体内容?

如何在gin中获取响应体内容?

原创
作者头像
Johns
修改于 2022-06-30 02:33:08
修改于 2022-06-30 02:33:08
12.1K0
举报
文章被收录于专栏:代码工具代码工具

实现思路: 对gin的responseWriter进行包装, 每次写往请求方写响应数据的时候,将响应数据返回出去。

step1: 定义一个新的CustomResponseWriter,通过组合方式持有一个gin.ResponseWriter和response body缓存。

代码语言:txt
AI代码解释
复制
type CustomResponseWriter struct {
   gin.ResponseWriter
   body *bytes.Buffer
}

func (w CustomResponseWriter) Write(b []byte) (int, error) {
   w.body.Write(b)
   return w.ResponseWriter.Write(b)
}

func (w CustomResponseWriter) WriteString(s string) (int, error) {
   w.body.WriteString(s)
   return w.ResponseWriter.WriteString(s)
}

step2. 然后在中间件中进行替换和使用

代码语言:txt
AI代码解释
复制
func AccessLogHandler() gin.HandlerFunc {
   return func(c *gin.Context) {
      blw := &CustomResponseWriter{body: bytes.NewBufferString(""), ResponseWriter: c.Writer}
      c.Writer = blw
      c.Next()
      fmt.Sprintf("url=%s, status=%d, resp=%s", c.Request.URL, c.Writer.Status(), blw.body.String())
   }
}

step3: 使用中间件

代码语言:txt
AI代码解释
复制
//初始化中间件
func InitMiddleware(r *gin.Engine) {
   // 生成请求唯一id
   r.Use(setUUIDContext())
   //access log
   r.Use(AccessLogHandler())
   // 跨域请求处理
   r.Use(Cors())
   // 异常保护
   r.Use(Recover)
}

测试验证

启动main函数后看到Console中的内容

代码语言:txt
AI代码解释
复制
url=/microservice/api/v1/verify_code_get, status=200, resp={"code":0,"msg":"success"}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Gin 优雅打印请求与回包内容
在开发 Web 应用程序时,难免不会遇到功能或性能等问题。为了快速定位问题,需要打印请求和响应的内容。
恋喵大鲤鱼
2023/03/08
3.4K0
gin框架上手实践
Gin框架是一个用Go语言编写的高性能Web框架,以其速度和简洁性著称。它由一个轻量级的HTTP路由器和一个中间件架构组成,能够处理大型流量并简化开发者的工作。Gin的主要特点包括内置的路由组、简洁的API设计、强大的错误处理机制、支持多种格式的请求绑定和验证,以及内置的日志记录功能。由于其性能优越和易于使用,Gin广泛应用于构建RESTful API和Web服务。其设计理念是尽可能减少繁琐的配置和代码,让开发者专注于业务逻辑,实现快速开发和部署。
FunTester
2024/07/30
1640
gin框架上手实践
Go gin框架封装中间件之2:操作日志中间件
‍需求说明 管理后台所有修改,添加,删除的操作都要记录 操作日志的统计不影响主程序的性能 需求分析 把相关代码封装成中间件,独立使用 合理使用goroutine,不影响主线程的性能 文档说明 基于golang语言开发 基于gin网络框架开发 基于MySQL5.8开发 把操作日志部分封装成中间件,在rourter文件中引用 非核心代码已省略,用3个竖着排列的点号.表示 数据库表结构设置 操作日志表 代码 中间件代码 代码分析 我们可以通过context直接获得请求方式和请求的url 无法直接获得返回信息,
王中阳Go
2022/10/26
2.2K0
Go gin框架封装中间件之2:操作日志中间件
学会开发这几个中间件,Go项目就有保障啦
为了让Go项目的日志组件更好用以及产出的日志能够帮助我们快速定位问题,我在《Go日志门面的设计与实现-自动注入追踪ID标记代码位置、简化日志操作》中给项目单独定制了一个日志门面来简化项目中对日志的操作。
KevinYan
2024/11/23
1220
学会开发这几个中间件,Go项目就有保障啦
[系列] - go-gin-api 路由中间件 - 日志记录(三)
上篇文章分享了,规划项目目录和参数验证,其中参数验证使用的是 validator.v8 版本,现已更新到 validator.v9 版本,最新代码查看 github 即可。
新亮
2019/09/03
2.9K0
[系列] - go-gin-api 路由中间件 - 日志记录(三)
go : gin 自定义中间件
本文实验gin框架下自定义中间件 以日志为例 代码: package main import ( "log" "time" "github.com/gin-gonic/gin" ) func Logger() gin.HandlerFunc { return func(c *gin.Context) { t := time.Now() // Set example variable c.Set("example", "
IT工作者
2022/07/26
4180
Gin框架详解
gin是一个开源的,用golang开发的web框架,https://github.com/gin-gonic/gin 地址如下。它有如下特性:
榴莲其实还可以
2019/07/19
7.4K0
gin框架之集成验证码(captcha)
在开发的过程中,我们有些接口为了防止被恶意调用,我们会采用加验证码的方式,例如:发送短信的接口,为了防止短信接口被频繁调用造成损失;注册的接口,为了防止恶意注册。在这里为大家推荐一个验证码的类库,方便大家学习使用。
大话swift
2020/03/16
3.2K0
gin框架之集成验证码(captcha)
Golang Gin 实战(十三)| 中间件详解看这一篇就够了
在Gin的整个实现中,中间件可谓是Gin的精髓。一个个中间件组成一条中间件链,对HTTP Request请求进行拦截处理,实现了代码的解耦和分离,并且中间件之间相互不用感知到,每个中间件只需要处理自己需要处理的事情即可。今天我们就通过这篇文章,详细的介绍Gin中间的使用和原理。
飞雪无情
2020/06/30
4.9K0
Gin框架核心源码走读
| 导语 最近考虑给SCF简单封一层web库,提供cgi的http协议处理、上下文、拦截器、html渲染等能力。很自然就想到了Gin框架,基于golang且框架比较轻量,这里简单把核心源码做个走读笔记
王昂
2020/01/25
3.1K0
Gin框架核心源码走读
Gin框架入门系列-中间件
在Gin框架中,中间件(Middleware)指的是可以拦截http请求-响应生命周期的特殊函数,在请求-响应生命周期中可以注册多个中间件,每个中间件执行不同的功能,一个中间执行完再轮到下一个中间件执行。
用户10002156
2023/11/20
2870
Gin框架入门系列-中间件
Gin框架集成日志插件
日志管理:Gin框架支持按天、小时、分钟等单位来分割日志,通过设置日志分割规则和文件数量等信息,可以将日志分割为多个文件,方便日志管理和分析。
闫同学
2023/12/11
5370
Web框架的设计方案和Go源码实现
那么为何要用web框架,或者说现在的主流web后端开发都要选定一个框架,然后再开发,就是为了提高效率,共通的业务以外的逻辑都由框架实现了,有了框架,开发只需要专注业务逻辑。
后端云
2022/11/25
3750
Web框架的设计方案和Go源码实现
Zap日志库并集成Gin
在许多Go语言项目中,我们需要一个好的日志记录器能够提供下面这些功能: 1 . 能够将事件记录到文件中,而不是应用程序控制台; 2 . 日志切割-能够根据文件大小、时间或间隔等来切割日志文件; 3 . 支持不同的日志级别。例如INFO,DEBUG,ERROR等; 4 . 能够打印基本信息,如调用文件/函数名和行号,日志时间等;
iginkgo18
2021/04/23
3.6K0
每日一库:Gin Middleware开发
Gin是一个用Go语言编写的Web框架,它提供了一种简单的方式来创建HTTP路由和处理HTTP请求。中间件是Gin框架中的一个重要概念,它可以用来处理HTTP请求和响应,或者在处理请求之前和之后执行一些操作。
孟斯特
2023/10/16
4350
每日一库:Gin Middleware开发
写在学习golang一个月后
连接池。由于PHP没有连接池,当高并发时就会有大量的数据库连接直接冲击到MySQL上,最终导致数据库挂掉。虽然Swoole有连接池,但是Swoole只是PHP的一个扩展,之前使用Swoole过程中就踩过很多的坑。经过我们的讨论还是觉得使用Golang更加可控一些。
李海彬
2018/10/08
1.1K0
写在学习golang一个月后
Gin中浮点数 NaN JSON序列化问题
作者:matrix 被围观: 261 次 发布时间:2024-12-24 分类:Golang | 无评论 »
HHTjim 部落格
2025/02/26
680
Gin中浮点数 NaN JSON序列化问题
Go Web编程--给自己写的服务器添加错误和访问日志
错误日志和访问日志是一个服务器必须支持的功能,我们教程里使用的服务器到目前为止还没有这两个功能。正好前两天也写了篇介绍logrus日志库的文章,那么今天的文章里就给我们自己写的服务器加上错误日志和访问日志的功能。在介绍添加访问日志的时候会介绍一种通过编写中间件获取HTTP响应的StausCode和Body的方法。
KevinYan
2020/03/31
1.3K0
Go Web编程--给自己写的服务器添加错误和访问日志
GO中间件(Middleware )
中间件是一种计算机软件,可为操作系统提供的软件应用程序提供服务,以便于各个软件之间的沟通,特别是系统软件和应用软件。广泛用于web应用和面向服务的体系结构等。
孤烟
2020/09/27
1.6K0
Gin框架集成Zap日志库
在go语言gin框架中,日志是默认输出到终端的,但是我们在实际工作中,一般来说是需要记录服务器日志的。而最常用的日志库就是zap日志库,我们需要将gin在终端输出的内容通过zap日志库记录到文件中
code-x
2023/03/22
8610
相关推荐
Gin 优雅打印请求与回包内容
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档