http - 如何复制 Context 对象而不派生

标签 http go copy cancellation

我想复制一个上下文对象 - 准确地说是一个请求上下文,并稍后在单独的 go 例程中使用它。

问题是,如果我在该请求的 HTTP 处理程序完成后使用 context.WithCancel(reqCtx) 派生请求上下文,则不仅原始请求上下文将被取消,而且请求上下文也将被取消。

我希望能够复制原始请求上下文,并且在 HTTP 处理程序完成执行后不会被原始上下文取消。

最佳答案

以下是如何创建一个使用其他上下文中的值但不使用取消的上下文:

type valueOnlyContext struct{ context.Context }
func (valueOnlyContext) Deadline() (deadline time.Time, ok bool) { return }
func (valueOnlyContext) Done() <-chan struct{} { return nil }
func (valueOnlyContext) Err() error { return nil }

像这样使用它:

 ctx := valueOnlyContext{reqCtx}

使用不取消的值可能超出了 context 包的设计意图。如果包的设计者认为这是一件好事,我会期望他们将以上内容捆绑在上下文包函数中。

关于http - 如何复制 Context 对象而不派生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59348712/

相关文章:

http - 在 golang 服务器中面临 cors 问题

go - 无法让 for 循环迭代足够的次数以使我的程序正常工作

java - 有没有办法制作 JPanel 的非深拷贝

testing - 我应该使用哪种方法来测试 golang 中的 func main()?

windows - 将 txt 文件中列出的文件复制到另一个目录中

将指向结构的指针复制到新指针以复制 C 中的结构

javascript - 设置内容类型 : in angular js post request

excel - 如何在后端使用电子表格将数据从 EXCEL 用户表单发布到 Google 表单?

java - 在 Android 上使用 http 请求 POST xml 文件

swift - 有人可以找到错误并验证我的 Swift NSURLSession 代码吗?