-
Notifications
You must be signed in to change notification settings - Fork 135
Document Conflict between gorilla/context & Go 1.7's http.Request.WithContext() #32
Description
RE: gorilla/mux#182
OK, so this happens because r.WithContext() in Go 1.7, which gorilla/mux uses in Go 1.7, creates a shallow copy of the request: https://github.com/golang/go/blob/master/src/net/http/request.go#L288-L298
This shallow copy, as you'd expect, changes the address of the request in gorilla/context's map[*http.Request]map..., effectively islanding any context values.
This is a shortcoming in gorilla/context: any library, mux included, will break it come Go 1.7 and the http.Request.WithContext() method.`
I'm not sure if there's a clean way to fix this: one option would be to call context.GetAll to copy all values from the old request before we call WithContext, and then save them back into the (shallow) copy, but if you have private types as keys (which is recommended), then we can't reliably achieve that. It would also add context back as a dependency to mux.
- Add a warning to the README
- Document public API so that godoc users also notice the warning when using getters/setters.
cc/ @kisielk