'http.HandleFunc' 이외의 Go HTTP 라우팅에서 와일드카드 지원을 구현하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2024-11-14 12:17:02
원래의
597명이 탐색했습니다.

How to Implement Wildcard Support in Go HTTP Routing Beyond `http.HandleFunc`?

사용자 정의 핸들러를 사용하여 와일드카드를 사용한 고급 핸들러 패턴 일치

Go에서 라우팅 패턴을 정의하기 위해 http.HandleFunc를 사용할 때 내장된 메커니즘은 와일드카드 지원을 제공하지 마세요. 이는 동적 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의 제한을 뛰어넘는 유연한 라우팅 패턴을 구축할 수 있습니다. 핸들러.

위 내용은 'http.HandleFunc' 이외의 Go HTTP 라우팅에서 와일드카드 지원을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿