>백엔드 개발 >Golang >동일한 포트에서 여러 http.ServeMux 인스턴스를 결합하는 방법은 무엇입니까?

동일한 포트에서 여러 http.ServeMux 인스턴스를 결합하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-02 10:18:02796검색

How to Combine Multiple http.ServeMux Instances on the Same Port?

여러 http.ServeMux 인스턴스 결합

동일한 네트워크 주소 및 포트에서 여러 http.ServeMux 인스턴스를 제공하려면 CombinedMux 기능을 사용하세요. 다음과 같이 구현됩니다:

<code class="go">func combineMux(muxes ...*http.ServeMux) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        var h http.Handler

        for _, mux := range muxes {
            if h = mux.Handler(r); h != nil {
                h.ServeHTTP(w, r)
                return
            }
        }

        http.NotFound(w, r)
    })
}</code>

이 함수는 제공된 ServeMux 인스턴스를 반복하고 지정된 요청에 대해 첫 번째로 일치하는 핸들러를 제공하는 새로운 http.Handler를 생성합니다. 아무 것도 발견되지 않으면 404 찾을 수 없음 응답이 반환됩니다.

대체 접근 방식: ServeMux 인스턴스 중첩

동일한 결과를 얻는 또 다른 방법은 ServeMux를 중첩하는 것입니다. 서로의 인스턴스. 이는 http.ServeMux가 http.Handler 인터페이스를 구현하기 때문에 가능합니다.

예를 들어, 다음 접근 방식을 사용하여 동일한 포트와 호스트에서 muxA와 muxB를 제공하려면:

<code class="go">rootMux := http.NewServeMux()
rootMux.Handle("/muxa/", muxA)
rootMux.Handle("/muxb/", muxB)
http.ListenAndServe(":8080", rootMux)</code>

여기서 이 경우 rootMux는 루트 URL에 대한 모든 요청을 처리하고 /muxa/ 및 /muxb/에 대한 요청을 해당 ServeMux 인스턴스에 위임합니다. 각 중첩된 ServeMux는 자체 하위 경로 접두사(예: muxA의 경우 /muxa/)를 처리해야 합니다.

위 내용은 동일한 포트에서 여러 http.ServeMux 인스턴스를 결합하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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