It should be 

r = r.WithContext(context.WithValue(r.Context(), key, &s))

Using the address of a key was a typo.
On Tuesday, December 22, 2020 at 12:17:01 AM UTC+1 Uli Kunitz wrote:

> I don't think this is a good idea.
>
> I would do something like this.
>
> type mykey struct{}
> var key mykey
>
> r.Use(func(next http.Handler) http.Handler {
>                 return http.HandlerFunc(func(w http.ResponseWriter, r 
> *http.Request) {
>                         var s string
>                         r = r.WithContext(context.WithValue(r.Context(), 
> &key, &s))
>                         next.ServeHTTP(w, r)
>                         if s != "" {
>                                     fmt.Fprint("string %s\n", s)
>                         }                      
>                 })
>         })
>
> In the handler itself you must of course get the value by assuming that 
> key will always have string pointer. You can then assign a string to the 
> pointer, which will be output if its non-nil. Wonder whether you want to 
> store a map or a io.Writer as value instead of a single string.
> On Monday, December 21, 2020 at 5:49:54 PM UTC+1 z.kar...@gmail.com wrote:
>
>>
>> Hello,
>>
>> I'm wondering if it is ok to do this ?
>>
>> ////
>> package main
>>
>> import (
>>         "context"
>>         "fmt"
>>         "log"
>>         "net/http"
>>
>>         "github.com/gorilla/mux"
>> )
>>
>> func main() {
>>         addr := "127.0.0.1:8080"
>>         r := mux.NewRouter()
>>
>>         r.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
>>                 newReq := r.WithContext(context.WithValue(r.Context(), 0, 
>> "bla"))
>>                 *r = *newReq
>>                 // set context
>>         })
>>
>>         r.Use(func(next http.Handler) http.Handler {
>>                 return http.HandlerFunc(func(w http.ResponseWriter, r 
>> *http.Request) {
>>                         next.ServeHTTP(w, r)
>>
>>                         ctx := r.Context()
>>                         v, ok := ctx.Value(0).(string)
>>                         if !ok {
>>                                 fmt.Println("could not find context 
>> value")
>>                         } else {
>>                                 fmt.Println(v)
>>                         }
>>                 })
>>         })
>>
>>         s := &http.Server{
>>                 Addr:    addr,
>>                 Handler: r,
>>         }
>>
>>         if err := s.ListenAndServe(); err != nil && err != 
>> http.ErrServerClosed {
>>                 log.Fatalf("could not listen on %s : %v", addr, err)
>>         }
>> }
>> ////
>>
>

-- 
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/2b5e0090-2f8d-4143-b62f-fb25f6640be8n%40googlegroups.com.

Reply via email to