package main import ( "context" "net/http" "github.com/kataras/iris/v12" ) func main() { app := iris.New() httpThirdPartyWrapper := StandardWrapper(Options{ Message: "test_value", }) // This case app.WrapRouter(func(w http.ResponseWriter, r *http.Request, router http.HandlerFunc) { httpThirdPartyWrapper(router).ServeHTTP(w, r) // If was func(http.HandlerFunc) http.HandlerFunc: // httpThirdPartyWrapper(router.ServeHTTP).ServeHTTP(w, r) }) app.Get("/", index) app.Listen(":8080") } func index(ctx iris.Context) { ctx.Writef("Message: %s\n", ctx.Value(msgContextKey)) } type Options struct { Message string } type contextKey uint8 var ( msgContextKey contextKey = 1 ) func StandardWrapper(opts Options) func(http.Handler) http.Handler { return func(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // ... req := r.WithContext(context.WithValue(r.Context(), msgContextKey, opts.Message)) next.ServeHTTP(w, req) }) } }