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.

Reply via email to