O'Reilly logo

Go: Design Patterns for Real-World Projects by Mat Ryer, Mario Castro Contreras, Vladimir Vivien

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Sharing data between handlers

Occasionally, we need to share a state between our middleware and handlers. Go 1.7 brought the context package into the standard library, which gives us, among other things, a way to share basic request-scoped data.

Every http.Request method comes with a context.Context object accessible via the request.Context() method, from which we can create new context objects. We can then call request.WithContext() to get a (cheap) shallow copied http.Request method that uses our new Context object.

To add a value, we can create a new context (based on the existing one from the request) via the context.WithValue method:

ctx := context.WithValue(r.Context(), "key", "value") 

Tip

While you can technically store any type of data using ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required