在Golang中克隆HTTP请求上下文,没有取消和截止日期

107 阅读1分钟

在这个例子中,我们将克隆HTTP请求上下文及其所有的上下文键/值对。然而,重要的一点是,我们将放弃取消或最后期限的传播。原因是,当响应被返回或上下文因任何原因被取消时,我们不希望我们的上下文被终止并过早地破坏我们的应用程序。

这里有两个选项。第一个是你在一个全新的上下文上手动设置所有的键/值对,并忽略HTTP请求上下文。然而,如果你不知道key/value,那么这就没有用了。第二种选择是我们上面所描述的,所以我们要分离并克隆现有的HTTP请求上下文。

有一点你需要注意的是。如果HTTP请求上下文与你需要上下文的后台任务无关,只需创建一个全新的上下文。不要克隆HTTP请求上下文。

我们的例子很简单。我们将有两个中间件,我们在HTTP请求上下文中设置一些键/值对。我们还将在其上添加超时/截止日期。然后我们将打印出原始和分离/克隆的上下文的样子。

结构

├── context

文件

detached.go

package context

one.go

不要像我下面做的那样设置上下文的键/值。正确使用上下文键。

package middleware

two.go

不要像我在下面做的那样设置上下文键/值。正确使用上下文键。

package middleware

main.go

package main

测试

当你调用http://localhost:8181 ,终端的输出应该如下图所示。正如你所看到的,我们分离/克隆的上下文丢弃了超时/截止信息,所以它不会再被取消了。

DETACHED ---