>  기사  >  백엔드 개발  >  HTTP 처리기의 URL 패턴에서 와일드카드를 어떻게 일치시킬 수 있습니까?

HTTP 처리기의 URL 패턴에서 와일드카드를 어떻게 일치시킬 수 있습니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-12 19:38:02320검색

How Can I Match Wildcards in URL Patterns for HTTP Handlers?

HTTP 핸들러 패턴에 와일드카드 지정

http.Handler 또는 http.HandleFunc를 사용하여 핸들러를 생성할 때 와일드카드를 지정할 수 있습니다. URL 범위와 일치하는 패턴입니다. 불행하게도 이러한 함수의 패턴은 정규식이 아니며 기본적으로 와일드카드를 지원하지 않습니다.

대신 정규식이나 기타 원하는 패턴을 사용하여 패턴 일치를 지원하는 사용자 정의 핸들러를 만들 수 있습니다. 다음은 정규식을 사용한 예입니다.

import (
    "net/http"
    "regexp"
)

type route struct {
    pattern *regexp.Regexp
    handler http.Handler
}

type RegexpHandler struct {
    routes []*route
}

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)
}

자신만의 사용자 정의 핸들러를 구현하면 자신만의 패턴 일치 논리를 정의하고 필요에 따라 다양한 유형의 URL을 처리할 수 있는 유연성을 얻을 수 있습니다.

위 내용은 HTTP 처리기의 URL 패턴에서 와일드카드를 어떻게 일치시킬 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.