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.

Reply via email to