如何使用多个negroni.Wrap()

I have an issue to implement middleware i want to use negroni.Wrap function for validate user location and one for calling handler below is my route:

r.Handle("/users/{userID}", negroni.New(
        negroni.HandlerFunc(validateTokenMiddleware),
        negroni.Wrap(&userLocation),
        negroni.Wrap(&userDetailHandler),
    )).Methods("GET")

and &userLocation is object of an struct which contain db information, here when i request for handler then that time both wrap execute together. But i want execute &userlocation first and if any errors occur so next wrap should not be execute , how to resolve this issue.

Thanks.

Use a middleware having ServeHttp Method which will be called using userDetailHandler as receiver inside middleware. And pass your db struct in middleware as an argument . You should use single wrap.

r.Handle("/users/{userID}", negroni.New(
        negroni.HandlerFunc(validateTokenMiddleware),
        negroni.Wrap(userDetailHandler.Middleware(&userLocation)),
    )).Methods("GET")

func (userDetailHandler *UserDetailHandler)Middleware(res http.ResponseWriter, req *http.Request, userLocation *userLocation){
   // use your serve Http inside this
   userDetailHandler.ServeHttp(res, req)
}