You do not have permission to delete messages in this group
Copy link
Report message
Show original message
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
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
Reply to author
Sign in to reply to author
Forward
Sign in to forward
Delete
You do not have permission to delete messages in this group
Copy link
Report message
Show original message
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
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).