В промежуточном программном обеспечении вам нужно вызвать обработчик next
, чтобы все входящие запросы перешли на маршрут назначения.
func dynamicRouteMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
fmt.Println("Error")
next.ServeHTTP(w, r) // <------- this one
})
}
Вы можете зарегистрировать любые маршруты, как хотите, но в самом конце выполнитеУбедитесь, что объект r
используется в качестве обработчика маршрута /
.
r.HandleFunc("/test", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("test"))
})
r.HandleFunc("/test/12", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("test 12"))
})
r.HandleFunc("/about-us", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("about us"))
})
http.Handle("/", r)
http.ListenAndServe(":8080", nil)
При доступе к /test
, /test/12
или /about-us
;Error
будет по-прежнему печататься.
Ранее он не печатался, поскольку вы не переходите к следующему обработчику.Код next.ServeHTTP(w, r)
обязателен в вашем случае.