我如何创建一个 Go 上下文的副本(如果你愿意的话,一个克隆),它包含存储在原始文件中的所有值,但不会在原始文件被取消时被取消?
对我来说,这确实是一个有效的用例。假设我有一个 http 请求,它的上下文在响应返回给客户端后被取消,我需要在这个请求结束时在一个单独的 goroutine 中运行一个异步任务,这个 goroutine 很可能比父上下文活得更久。
func Handler(ctx context.Context) (interface{}, error) {
result := doStuff(ctx)
newContext := howDoICloneYou(ctx)
go func() {
doSomethingElse(newContext)
}()
return result
}
谁能建议应该如何完成?
当然,我可以跟踪所有可能放入上下文中的值,创建一个新的背景 ctx,然后遍历每个可能的值并复制……但这看起来很乏味,而且很难在大型代码库中进行管理。
慕盖茨4494581
MYYA
月关宝盒
相关分类