Passing in parameters to a http.HandlerFunc

go, handler, http

Solution

You should be able to do what you wish by using closures.

Change `func index()` to the following (untested):

func index(resourceManager interface{}) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        managerType := string(reflect.TypeOf(resourceManager).String())
        w.Write([]byte(fmt.Sprintf("%v", managerType)))
    }
}

And then do the same to `func show()`

Problem

I'm using Go's built in http server and pat to respond to some URLs: ``` mux.Get("/products", http.HandlerFunc(index)) func index(w http.ResponseWriter, r *http.Request) { // Do something. } ``` I need to pass in an extra parameter to this handler function - an interface. ``` func (api Api) Attach(resourceManager interface{}, route string) { // Apply typical REST actions to Mux. // ie: Product - to /products mux.Get(route, http.HandlerFunc(index(resourceManager))) // ie: Product ID: 1 - to /products/1 mux.Get(route+"/:id", http.HandlerFunc(show(resourceManager))) } func index(w http.ResponseWriter, r *http.Request, resourceManager interface{}) { managerType := string(reflect.TypeOf(resourceManager).String()) w.Write([]byte(fmt.Sprintf("%v", managerType))) } func show(w http.ResponseWriter, r *http.Request, resourceManager interface{}) { managerType := string(reflect.TypeOf(resourceManager).String()) w.Write([]byte(fmt.Sprintf("%v", managerType))) } ``` How can I send in an extra paramter to the handler function?

Original source