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()

© 孙东辉 2022 - 2024