Go语言 echo v4中的上下文

rjjhvcjd  于 2023-01-22  发布在  Go
关注(0)|答案(1)|浏览(200)

当我提出一个带有上下文的请求时

req, err := http.NewRequestWithContext(ctx, method, url, payload)

然后,如果我检查服务中的上下文,我可以看到我发送的上下文。例如,在一个使用gin gonic框架的API中,我使用以下命令获得我发送的上下文:

c.Request.Context()

但是,在使用echo/v4的API中,如果我使用

c.Request().Context()

我得到了一个上下文,但它不是我发送的上下文。
我期待在上下文中获得我已经发送了一个echo API。
我加了这张图片,这是我发送的ctx。
Context I sent
当我在接收上下文的第二个服务中检查ctxt时,我使用gin得到了上下文:
In Gin API
然而,我得到的回应是:
In Echo API

oug3syen

oug3syen1#

我无法解释为什么gin看到的上下文看起来像您发送的上下文,但是您对http.Request.ctxhttp.Request.Context()返回的内容)的期望是不正确的。如果您想在HTTP客户机和服务器之间传递额外的信息,您必须使用HTTP支持的机制来完成此操作,即请求主体、请求参数、和请求头。gin和echo甚至都有自己的内部Context类型,用于在调用堆栈中携带信息,这只会让事情变得更加混乱。
如果查看the library code which actually writes out the http request,您会发现它没有使用golang context.Context的键/值功能。
它实际上似乎只用于here,其中RoundTripper检查请求的上下文是否在完成之前超时,在这种情况下(正如人们所预料的那样)将返回一个错误。
因此,我认为您需要重新调整您对HTTP中的请求上下文的期望,并使用支持的机制之一来传递您需要传递的任何内容。

相关问题