Golang Custom Application Context

222 views
Skip to first unread message

Ibraheem Ahmed

unread,
Aug 20, 2020, 6:56:49 PM8/20/20
to golang-nuts
In my application I store a map of all my templates (`map[string]*template.Template`) in an `ApplicationEngine` struct, which is my application framework instance. I am currently using the standard `context.Context` to pass request scoped values between my middlewares and handlers. I need a way to access that map of templates in order to render a specific template file. What is the best way to do this? Is storing a map of templates even a good idea?

I know that contexts are a controversial issue and just want to hear the available options. 

I am currently thinking of adopting a way similar to the [gin framework's context](https://github.com/gin-gonic/gin/blob/master/context.go#L56). Gin uses a custom struct that stores a pointer to `gin.Engine`, which is their application framework instance. They then have a `HTML()` function on the context struct, which accesses the template map stored in the `gin.Engine` pointer.

While my question is specific to my need, there is a broader discussion here. Should you use custom structs instead of the "standard" `context.Context`? Most web frameworks (gobuffalo, gin, echo) seem to handle it this way, but there seems to be no consensus on if it is a good idea.

Gregor Best

unread,
Aug 24, 2020, 3:56:47 AM8/24/20
to golan...@googlegroups.com
Templates aren't really request scoped  though, right? I read the term
"request scoped" as "things like request IDs, timing information and
maybe user authentication".

What I usually do in situations like this is to make the handler
functions methods of a `RequestHandler` type which in your case would be
the `ApplicationEngine`. Then you create an instance of that struct in
your `main` or wherever and register its methods as HTTP handler
functions (or whatever protocol you use for transport).
> --
> You received this message because you are subscribed to the Google
> Groups "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send
> an email to golang-nuts...@googlegroups.com
> <mailto:golang-nuts...@googlegroups.com>.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/golang-nuts/969f4dc0-f63a-4a9f-b8ff-04457498107en%40googlegroups.com
> <https://groups.google.com/d/msgid/golang-nuts/969f4dc0-f63a-4a9f-b8ff-04457498107en%40googlegroups.com?utm_medium=email&utm_source=footer>.

--
--
Gregor Best
be...@pferdewetten.de

Reply all
Reply to author
Forward
0 new messages