Расширенное сопоставление шаблонов обработчиков с подстановочными знаками с использованием пользовательских обработчиков.
При использовании http.HandleFunc для определения шаблонов маршрутизации в Go встроенные механизмы не предлагайте поддержку подстановочных знаков. Это может быть ограничивающим фактором для захвата компонентов динамического URL-адреса.
Пользовательский обработчик с сопоставлением шаблонов регулярных выражений
Чтобы преодолеть это ограничение, можно создать собственный обработчик, который поддерживает гибкое сопоставление шаблонов с использованием регулярных выражений. Вот пример:
import ( "net/http" "regexp" ) type route struct { pattern *regexp.Regexp handler http.Handler } type RegexpHandler struct { routes []*route } // Handler adds a route to the custom handler. func (h *RegexpHandler) Handler(pattern *regexp.Regexp, handler http.Handler) { h.routes = append(h.routes, &route{pattern, handler}) } // HandleFunc adds a function-based route to the custom handler. func (h *RegexpHandler) HandleFunc(pattern *regexp.Regexp, handler func(http.ResponseWriter, *http.Request)) { h.routes = append(h.routes, &route{pattern, http.HandlerFunc(handler)}) } // ServeHTTP iterates through registered routes and checks if any pattern matches the request. If a match is found, the corresponding handler is invoked. func (h *RegexpHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { for _, route := range h.routes { if route.pattern.MatchString(r.URL.Path) { route.handler.ServeHTTP(w, r) return } } // No pattern matched, return a 404 response. http.NotFound(w, r) }
Использование:
Пример использования пользовательского обработчика для обработки URL-адресов с шаблонами подстановочных знаков:
import ( "log" "net/http" ) func main() { rh := &RegexpHandler{} // Define a regular expression for capturing any valid URL string. pattern := regexp.MustCompile(`/groups/.*/people`) rh.HandleFunc(pattern, peopleInGroupHandler) // Start the web server and use the custom handler. log.Fatal(http.ListenAndServe(":8080", rh)) }
Этот подход позволяет создавать гибкие шаблоны маршрутизации, выходящие за рамки ограничений http.HandleFunc, сохраняя при этом контроль над логикой сопоставления путей в пользовательском обработчике.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3