【go】GIN参数重复绑定报错EOF问题

文章目录

  • [1 问题描述](#1 问题描述)
  • [2 解决:替换为ShouldBindBodyWith](#2 解决:替换为ShouldBindBodyWith)

1 问题描述

在 Gin 框架中,当多次调用 ShouldBind() 或 ShouldBindJSON() 方法时,会导致请求体的数据流被读取多次,从而出现 "EOF" 错误。

例如在api层绑定了参数,又自定义了读取参数或绑定参数的中间件,会造成重复调用。

ERROR 2023/08/07 14:36:48 {"user_id":"975674f531784289bfba3ee011ec0af0","trace_id":"ae6331c69b5d474a8980c6f6ef8b86e2","error":"EOF","position":{"FileName":"D:/nscp_code/nscp/api/v1/organization.go","FuncName":"nscp/api/v1.(\*origanizationApi).FindByCompanyIds","Line":63}}

2 解决:替换为ShouldBindBodyWith

复制代码
// 原本
c.ShouldBindJSON
c.ShouldBind

 // 替换为
c.ShouldBindBodyWith(&req,binding.JSON) 

此时body 会cache 到上下文中,重复绑定不会有问题

相关推荐
念何架构之路17 分钟前
Go reflect包值操作 Value 的读写、可设置性与 interface 布局
开发语言·后端·golang
紧跟先前的步伐2 小时前
Go AI Agent 实战 18|Tool Calling 的基本原理与完整执行流程
前端·数据库·人工智能·ai·golang·1024程序员节
紧跟先前的步伐2 小时前
Go AI Agent 实战 17|模型适配层设计:让模型可替换
开发语言·人工智能·后端·ai·golang
l1t3 小时前
DeepSeek辅助编写连接sqlite的CLI
数据库·golang·sqlite
计算机就业还在扩大3 小时前
第2期-cmp.Ordered+类型推断+刻意未支持的特性
后端·面试·golang
念何架构之路19 小时前
Go reflect 包:结构体反射 —Field、Tag 与 VisibleFields
java·数据库·golang
喵了几个咪21 小时前
GoWind Admin 拆解:一个 Sender 接口接 39 个通知渠道
微服务·golang·go·1024程序员节·admin·gowind
紧跟先前的步伐1 天前
Go AI Agent 实战 13|大模型流式输出 Streaming 的实现
人工智能·ai·golang·1024程序员节
喵了几个咪1 天前
GoWind Ops 深度拆解:纯出站 Agent + MQTT 信令,把「管机器、跑项目、发脚本、构建分发」做扎实
golang·gowind