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 [email protected] 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 [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/golang-nuts/ec7616dc-04ac-4b61-9763-5942c4d5ebf9n%40googlegroups.com.