http.HandleFunc 또는 http.Handler로 핸들러를 등록할 때 여러 경로와 일치하도록 URL 패턴에 와일드카드를 지정하는 것이 바람직합니다. . 예를 들어 /groups/*/people과 같은 모든 요청에 대한 핸들러를 정의할 수 있습니다.
안타깝게도 Go의 HTTP 핸들러에 대한 기본 패턴 일치는 와일드카드를 지원하지 않습니다. 패턴은 정규식이나 glob이 아니며 와일드카드 경로를 표현하는 기본 제공 방법이 없습니다.
한 가지 해결책은 정규식을 사용하여 더 복잡한 패턴과 일치시키는 사용자 정의 처리기 함수를 생성하는 것입니다. 다음은 정규식을 지원하는 사용자 정의 핸들러의 예입니다.
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) }
이 사용자 정의 핸들러를 사용하면 정규식 패턴을 정의하고 이를 핸들러 함수와 연결할 수 있습니다. 요청이 들어오면 핸들러는 해당 패턴에 대해 요청 경로를 확인하고 일치하는 항목이 있으면 연관된 핸들러로 전달합니다.
이 접근 방식은 더 큰 유연성을 제공하지만 추가 개발 노력이 필요하고 다음에 대한 종속성을 도입합니다. 정규식. 그럼에도 불구하고 http.HandleFunc와 일치하는 복잡한 URL 패턴에 실행 가능한 옵션입니다.
위 내용은 Go의 HTTP 핸들러에서 URL 패턴에 대한 와일드카드 일치를 어떻게 구현할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!