Go Gin *gin.Context VS gin.Context.Copy()
date
Aug 8, 2023
slug
go-gin-context-copy-vs-gin-context
status
Published
tags
Go
Gin
summary
谨慎使用 c.Copy()
type
Post
Created Time
Oct 28, 2023 01:45 PM
Updated Time
Oct 28, 2023 01:45 PM
AI summary
This post discusses the use of
gin.Context
and gin.Context.Copy()
in Go Gin for downloading files. When using c.Copy()
, it creates a copy of the context, including request and response information, but does not copy the request body. Therefore, if attempting to read the request body in the download
function, it will not be able to retrieve the data. To fix this issue, the original context object c
should be passed directly to the download
function instead of using c.Copy()
.Status
当使用 Gin 下载文件时,示例代码如下:
但如果换一种写法(本质的目的是为了封装):
就会发现,代码不能正常执行了,而出错的位置,就是
c.File
方法,为什么呢?这是因为,
c.Copy()
方法返回的是一个上下文的副本,包括请求和响应的相关信息。但是,c.Copy()
方法并不会复制请求体的内容。因此,如果在download
函数中尝试读取请求体的内容时,将无法获取到数据。修正后的代码如下:
即想要在
download
函数中处理请求体的内容时,需要直接传递原始的上下文对象c
,而不是使用c.Copy()
。