【发布时间】:2022-01-03 21:45:44
【问题描述】:
如文档所述
不要将上下文存储在结构类型中;相反,将 Context 显式传递给需要它的每个函数。 Context应该是第一个参数,通常命名为ctx
但我发现,在典型的 http 请求句柄函数中,http.Request 对象具有 .Context() 方法可以检索与 http 请求关联的上下文。
那么为什么建议在这些函数中使用上下文作为第一个参数。在这种情况下这样做合理吗?
我知道这不是限制规则。但我不知道为什么HandlerFunc 是func(ResponseWriter, *Request) 而不是func(context.Context, ResponseWriter, *Request)
显然,HandlerFunc 破坏了建议。
【问题讨论】:
-
推荐的不错,坚持下去。请注意,对于 http 包,要在不破坏兼容性的情况下改装 Context hat。这里没什么可看的。
-
这是一个约定。就像节点中的“错误第一个回调”。
-
@Volker 所以你的意思是添加
.Context()只是为了不破坏兼容性?这不是最佳做法? -
是的,这是最佳实践。违反保证的兼容性承诺将是一种糟糕的做法。
-
req.Context()与破坏向后兼容性无关?请求存储一个上下文,以便您可以随时检索它(鉴于http.Request在这种意义上是一个值对象)
标签: http go backend go-context