I'm using Gorilla mux as my router and dispatcher in my golang apps and I have a -I think- simple question:
In my main, I create a router: r := mux.NewRouter()
. A few lines further, I register a handler: r.HandleFunc("/", doSomething)
.
So far so good, but now my problem is that I have a package which adds handlers to the http package
of Golang and not to my mux router. Like this:
func AddInternalHandlers() {
http.HandleFunc("/internal/selfdiagnose.html", handleSelfdiagnose)
http.HandleFunc("/internal/selfdiagnose.xml", handleSelfdiagnose)
http.HandleFunc("/internal/selfdiagnose.json", handleSelfdiagnose)
}
As you can see, it adds handles to the http.HandleFunc and not to the mux-handleFunc. Any idea how I can fix this without touching the package itself?
Working example
package main
import (
"fmt"
"log"
"net/http"
selfdiagnose "github.com/emicklei/go-selfdiagnose"
"github.com/gorilla/mux"
)
func homeHandler(w http.ResponseWriter, r *http.Request) {
log.Println("home")
}
func main() {
r := mux.NewRouter()
r.HandleFunc("/", homeHandler)
selfdiagnose.AddInternalHandlers()
// when handler (nil) gets replaced with mux (r), then the
// handlers in package selfdiagnose are not "active"
err := http.ListenAndServe(fmt.Sprintf("%s:%d", "localhost", 8080), nil)
if err != nil {
log.Println(err)
}
}