I am using Golang net/context package for passing on the ID's wrapped in a context object from one service to another. I am able to pass the context object successfully but to actually retrieve the value of a particular key, the context.Value(key) always returns a nil. I am not sure why, but this is what I have done so far:
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 is of the type context.Context and on printing it I get:
context.Background.WithValue(0, "12345")
I am interested in fetching the value "12345" from the context. From the Golang net/context documentation (https://blog.golang.org/context) , the Value() takes in a key of interface{} type and returns a interface{} and hence I typecast is to .(string). Could anyone help with this ?
Your context key is isn't an
int
, which is the default type the untyped constant0
will be assigned to when passed to Value in aninterface{}
.You need to set and extract the value with the correct type as well. You need to define a single type that you will always use as keys. I often times define helper functions to extract the context values and do the type assertion, which in your case could also serve to normalize the key type.