gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 01:26:14 25 4
gpt4 key购买 nike

我想复制一个上下文对象 - 准确地说是一个请求上下文,并稍后在单独的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com