Home > Article > Backend Development > How can I implement wildcard matching for URL patterns in Go's HTTP handlers?
When registering handlers with http.HandleFunc or http.Handler, it's desirable to specify wildcards in the URL pattern to match multiple paths. For instance, one might want to define a handler for all requests like /groups/*/people.
Unfortunately, the default pattern matching for HTTP handlers in Go does not support wildcards. Patterns are not regular expressions or globs, and there is no built-in way to express wildcard paths.
One solution is to generate custom handler functions that use regular expressions to match more complex patterns. Here's an example of a custom handler that supports regular expressions:
import ( "net/http" "regexp" ) type RegexpHandler struct { routes []*route } type route struct { pattern *regexp.Regexp handler http.Handler } func (h *RegexpHandler) Handler(pattern *regexp.Regexp, handler http.Handler) { h.routes = append(h.routes, &route{pattern, handler}) } func (h *RegexpHandler) HandleFunc(pattern *regexp.Regexp, handler func(http.ResponseWriter, *http.Request)) { h.routes = append(h.routes, &route{pattern, http.HandlerFunc(handler)}) } 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; send 404 response http.NotFound(w, r) }
This custom handler allows you to define a regular expression pattern and associate it with a handler function. When a request comes in, the handler checks the request path against its patterns and dispatches to the associated handler if a match is found.
While this approach provides greater flexibility, it requires additional development effort and introduces a dependency on regular expressions. Nevertheless, it is a viable option for complex URL pattern matching with http.HandleFunc.
The above is the detailed content of How can I implement wildcard matching for URL patterns in Go's HTTP handlers?. For more information, please follow other related articles on the PHP Chinese website!