Я использую Gorilla мультиплексор как мой маршрутизатор и диспетчер в моем golang приложениях и у меня есть -I think- простого вопрос:Gorilla Мультиплексора HTTP пакет
В моем основном я создаю маршрутизатор: r := mux.NewRouter()
. Еще несколько строк, я регистрирую обработчик: r.HandleFunc("/", doSomething)
.
Пока все хорошо, но теперь моя проблема в том, что у меня есть пакет, который добавляет обработчики к http package
Golang, а не к моему мультиплексору. Как это:
func AddInternalHandlers() {
http.HandleFunc("/internal/selfdiagnose.html", handleSelfdiagnose)
http.HandleFunc("/internal/selfdiagnose.xml", handleSelfdiagnose)
http.HandleFunc("/internal/selfdiagnose.json", handleSelfdiagnose)
}
Как вы можете видеть, это добавляет ручки к http.HandleFunc и не на МПЛ-handleFunc. Любая идея, как я могу исправить это, не касаясь самого пакета?
Рабочий пример
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)
}
}
Вы спрашиваете, как вы могли бы извлечь обработчик из DefaultServeMux и вставить их в свой маршрутизатор? Вероятно, было бы более удобно обслуживать ваш пакет, чтобы не регистрировать обработчики, подобные этому. – JimB
Проблема в том, что это не мой пакет :). –
Итак, что вы спрашиваете? Или, может быть, вы хотите добавить свой маршрутизатор в DefaultServeMux? – JimB