为了账号安全,请及时绑定邮箱和手机立即绑定

从 Golang 中的网络/上下文中获取值

从 Golang 中的网络/上下文中获取值

Go
胡说叔叔 2022-01-17 18:26:31
我正在使用 Golang net/context 包将包装在上下文对象中的 ID 从一个服务传递到另一个服务。我能够成功传递上下文对象,但要实际检索特定键的值,context.Value(key) 总是返回 nil。我不知道为什么,但这是我到目前为止所做的:if ctx != nil {        fmt.Println(ctx)        fmt.Println("Found UUID, forwarding it")        id, ok := ctx.Value(0).(string)  // This always returns a nil and thus ok is set to false        if ok {            fmt.Println("id found %s", id)            req.headers.Set("ID", id)        }    }  ctx 是 context.Context 类型,在打印时我得到:context.Background.WithValue(0, "12345")我有兴趣从上下文中获取值“12345”。从 Golang 网络/上下文文档(https://blog.golang.org/context)中, Value() 接受 interface{} 类型的键并返回 interface{} ,因此我的类型转换为 .(string) . 有人可以帮忙吗?
查看完整描述

1 回答

?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

您的上下文键不是,这是在传递给 中的 Value 时将分配给int无类型常量的默认类型。0interface{}


c := context.Background()


v := context.WithValue(c, int32(0), 1234)

fmt.Println(v.Value(int64(0)))  // prints <nil>

fmt.Println(v.Value(int32(0)))  // print 1234

您还需要设置和提取具有正确类型的值。您需要定义一个始终用作键的类型。我经常定义帮助函数来提取上下文值并进行类型断言,在您的情况下,这也可以用于规范化键类型。


查看完整回答
反对 回复 2022-01-17
  • 1 回答
  • 0 关注
  • 188 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信