Oh I love this! Not too verbose but still understandable, clean, and easy to add stuff. I didn't even think of using a method as a handler.
Absolutely gonna go for this. Thanks! Le lundi 23 septembre 2019 18:35:06 UTC+2, Abhinav Gupta a écrit : > > You can place the dependencies into a struct and use a bound method on > that as your handler. So you build a struct that will hold > application-scoped objects like Redis client, content.Updater, etc. > > package contact > > type Handler struct { > Redis *redis.Client > Updater *content.Updater > Mapper *mapping.Updater > } > > func (h *Handler) Endpoint1(w http.ResponseWriter, r *http.Request) { > // ... > } > > Then build the Handler when you’re setting up the router (presumably in > main() or nearby) and register it against the router as usual. > > handler := contact.Handler{ > Redis: config.GetRedisDb(), > Updater: contents.GetUpdater(), > Mapper: mapping.GetUpdater(), > } > > myRouter.Handle("/endpoint1/", http.HandlerFunc(h.Endpoint1)).Methods("POST", > "OPTIONS") > // or > myRouter.HandleFunc("/endpoint1/", h.Endpoint1).Methods("POST", "OPTIONS") > > > > On Mon, Sep 23, 2019 at 2:37 AM Nathanael Curin <n.c...@capitaldata.fr > <javascript:>> wrote: > >> I'm avoiding context.WithValue since I feel the objects I'm dealing with >> are too "powerful" (i.e. not simple Values). For a read, a 2016 article on >> this : https://peter.bourgon.org/blog/2016/07/11/context.html >> >> <https://urldefense.proofpoint.com/v2/url?u=https-3A__peter.bourgon.org_blog_2016_07_11_context.html&d=DwMFaQ&c=r2dcLCtU9q6n0vrtnDw9vg&r=1l8pq-0AmiqF9VqB_zc2sA&m=NI61KpC9jRpLlUlKWVRDZmipntercznF0NBSCnIuTxo&s=pE-cXfAKqzEre0LV5lcGQmX_oGtu8kIyJyU7M14ZwWs&e=> >> I remember reading through another article saying the usage of WithValue >> is kind of risky when time goes on, since it's just a magical interface{} >> store. Performance-wise I'm not sure though. >> >> Though, you're right, that'd be another way to do it. Waiting for people >> to chime in with their ideas too (hopefully!) :) >> >> >> Le lundi 23 septembre 2019 11:20:52 UTC+2, Andrew Pillar a écrit : >>> >>> Why don't you use context.WithValue(r.Context(), <key>, <value>) for >>> passing >>> the injected values you want to your HTTP handlers. Then defer the logic >>> for >>> retrieving whatever you want for that handler to a middleware function. >>> >> -- >> 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 golan...@googlegroups.com <javascript:>. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/golang-nuts/c23761e8-1287-4758-8303-b39db8cf22f0%40googlegroups.com >> >> <https://urldefense.proofpoint.com/v2/url?u=https-3A__groups.google.com_d_msgid_golang-2Dnuts_c23761e8-2D1287-2D4758-2D8303-2Db39db8cf22f0-2540googlegroups.com-3Futm-5Fmedium-3Demail-26utm-5Fsource-3Dfooter&d=DwMFaQ&c=r2dcLCtU9q6n0vrtnDw9vg&r=1l8pq-0AmiqF9VqB_zc2sA&m=NI61KpC9jRpLlUlKWVRDZmipntercznF0NBSCnIuTxo&s=ZNX_GIIPz98YRMi2pEBylgj0avplFYR0Sm9gopwCNeM&e=> >> . >> > -- 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+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/c3c8e8b2-a035-43b8-b17d-2853cec404ba%40googlegroups.com.