Как я могу создать копию (если хотите, клона) контекста Go, которая содержит все значения, хранящиеся в оригинале, но не отменяется при оригинале?
Мне кажется, это правильный вариант использования. Скажем, у меня есть http-запрос, и его контекст отменяется после того, как ответ возвращается клиенту, и мне нужно выполнить асинхронную задачу в конце этого запроса в отдельной программе, которая, скорее всего, переживет родительский контекст.
func Handler(ctx context.Context) (interface{}, error) {
result := doStuff(ctx)
newContext := howDoICloneYou(ctx)
go func() {
doSomethingElse(newContext)
}()
return result
}
Кто-нибудь может посоветовать, как это должно быть сделано?
Конечно, я могу отслеживать все значения, которые могут быть помещены в контекст, создавать новый фоновый ctx, а затем просто перебирать каждое возможное значение и копировать ... Но это кажется утомительным и трудным в управлении большая кодовая база.