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/ec7616dc-04ac-4b61-9763-5942c4d5ebf9n%40googlegroups.com.