我是 golang 的新手。正如文档所说
不要将上下文存储在结构类型中;相反,将 Context 显式传递给需要它的每个函数。Context 应该是第一个参数,通常命名为 ctx
但我发现,在典型的 http 请求处理函数中,一个http.Request
对象具有.Context()
方法可以检索 http 请求关联的上下文。
那么为什么建议在这些函数中使用上下文作为第一个参数。在这种情况下这样做合理吗?
我知道这不是限制规则。但我不知道为什么HandlerFunc
是func(ResponseWriter, *Request)
而不是func(context.Context, ResponseWriter, *Request)
显然,HandlerFunc
打破建议。
Fli*_*mzy 12
正如您上面引用的文档中所述,ctx
应该是许多函数的(非常)常见参数。这类似于许多函数返回error
. 公共参数/返回值的最佳位置是列表中的第一个或最后一个。(可以说,Go 可以选择error
始终作为第一个返回值——我不会在这里讨论这一点)。
由于可变参数可能只是函数参数列表中的最后一个,因此公共参数的唯一选择就是第一个参数。
我想这就是为什么ctx
总是第一的原因。
这种模式也经常出现在 Go(和其他语言)中的其他变量中。每当一组相关函数使用公共变量时,该公共变量通常会出现在参数列表中的第一个(或者可能是第二个,之后ctx
)。
与您引用的建议相反,有些库存储ctx
在结构中,而不是将其作为第一个参数传递。这些通常(总是?)库必须ctx
在库合同确定后很久才能使用(通过 Go 1.x 兼容性保证)。
ctx
一般来说,对于任何新工作,您应该遵循将建议作为第一个参数传递的建议。
归档时间: |
|
查看次数: |
1089 次 |
最近记录: |