杜松子酒:什么是 gin.Context.Keys
gin golang: what is gin.Context.Keys
我尝试使用 go-gin 框架中的方法 context.GetBool
(here) 和一些查询参数。
它没有正常工作,我认为 Context.Keys
没有被查询参数填充。
所以我的问题是:什么是 gin.Context.Keys
,发出请求时应该如何填充它?
PS: 这个问题已经被问过 here,但是没有正确的答案。
tl;dr Keys
字段支持 Gin 的上下文实现 context.Context
接口作为请求范围的 key/value 载体.
I think the Context.Keys is not populated by query params.
正确。 Context.Keys
与查询参数无关。查询参数可用于 Context.Query
.
关于Keys
相反,关于struct字段的文档是这样写的:
Keys is a key/value pair exclusively for the context of each request.
并且这些 key/value 对可以通过 Get
and Set
访问。后一个的文档是:
Set is used to store a new key/value pair exclusively for this context. It also lazy initializes c.Keys if it was not used previously.
因此该字段类似于 context
包的 Context.WithValue
和 Context.Value
,例如请求范围参数。 Gin 的上下文 Keys
是存储原始 key/value 对的导出映射。 GetBool
等方法很方便,因为您不必自己键入断言 interface{}
值。
与其他web框架不同的是,Gin的Context没有包装一个context.Context
值(c.Request.Context
除外),而是直接实现接口。这包括 Value
方法本身,它也访问基础 Keys
字段。
顺便说一下,与标准库 context
实现的一个重要区别是 context.Context
接受 interface{}
键,而 Gin 的上下文仅接受 string
键。
我尝试使用 go-gin 框架中的方法 context.GetBool
(here) 和一些查询参数。
它没有正常工作,我认为 Context.Keys
没有被查询参数填充。
所以我的问题是:什么是 gin.Context.Keys
,发出请求时应该如何填充它?
PS: 这个问题已经被问过 here,但是没有正确的答案。
tl;dr Keys
字段支持 Gin 的上下文实现 context.Context
接口作为请求范围的 key/value 载体.
I think the Context.Keys is not populated by query params.
正确。 Context.Keys
与查询参数无关。查询参数可用于 Context.Query
.
关于Keys
相反,关于struct字段的文档是这样写的:
Keys is a key/value pair exclusively for the context of each request.
并且这些 key/value 对可以通过 Get
and Set
访问。后一个的文档是:
Set is used to store a new key/value pair exclusively for this context. It also lazy initializes c.Keys if it was not used previously.
因此该字段类似于 context
包的 Context.WithValue
和 Context.Value
,例如请求范围参数。 Gin 的上下文 Keys
是存储原始 key/value 对的导出映射。 GetBool
等方法很方便,因为您不必自己键入断言 interface{}
值。
与其他web框架不同的是,Gin的Context没有包装一个context.Context
值(c.Request.Context
除外),而是直接实现接口。这包括 Value
方法本身,它也访问基础 Keys
字段。
顺便说一下,与标准库 context
实现的一个重要区别是 context.Context
接受 interface{}
键,而 Gin 的上下文仅接受 string
键。