>  기사  >  백엔드 개발  >  Go의 net/http에서 HTTP 핸들러 등록을 취소하는 방법은 무엇입니까?

Go의 net/http에서 HTTP 핸들러 등록을 취소하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-05 17:01:02829검색

How to Deregister HTTP Handlers in Go's net/http?

net/http에서 등록 취소 처리

net/http의 HTTP 처리기를 동적으로 등록 및 등록 취소하여 요청 처리에 유연성을 제공할 수 있습니다. 핸들러 등록을 취소하려면 사용자 정의 ServerMux를 생성할 수 있습니다.

사용자 정의 ServerMux 구현

Go 소스 코드(GOROOT/src/pkg)에서 ServerMux용 코드를 복사합니다. /net/http/server.go, 라인 837-939). 사용자 정의 ServerMux에 Deregister 메소드를 추가하여 패턴-핸들러 매핑에서 핸들러를 제거합니다.

<code class="go">func (mux *MyMux) Deregister(pattern string) error {
    mux.mu.Lock()
    defer mux.mu.Unlock()
    del(mux.m, pattern)
    return nil
}</code>

Usage

사용자 정의 ServerMux의 인스턴스를 생성하고 평소와 같이 "/create" 경로를 처리합니다:

<code class="go">mux := newMux()
mux.Handle("/create", &factory)</code>

사용자 정의 ServerMux를 HTTP 서버의 핸들러로 설정:

<code class="go">srv := &http.Server {
    Addr: localhost:8080
    Handler: mux,
}</code>

등록 취소

핸들러 등록을 취소하려면 ServerMux에서 Deregister 메소드를 호출하면 됩니다.

<code class="go">mux.Deregister("/123/*")</code>

이렇게 하면 서버의 라우팅 동작이 수정되고 "/123/*"에 대한 후속 요청은 더 이상 이루어지지 않습니다. 이전에 등록된 핸들러에 의해 처리됩니다.

안전한 수정

다른 고루틴에서 deregister()를 호출하여 ServerMux를 수정하는 것은 안전하며 서버의 라우팅 로직을 업데이트합니다.

위 내용은 Go의 net/http에서 HTTP 핸들러 등록을 취소하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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