> 백엔드 개발 > Golang > Go의 `net/http` 패키지에서 핸들러를 등록 취소하는 방법은 무엇입니까?

Go의 `net/http` 패키지에서 핸들러를 등록 취소하는 방법은 무엇입니까?

DDD
풀어 주다: 2024-11-05 15:08:02
원래의
490명이 탐색했습니다.

How to Unregister Handlers in Go's `net/http` Package?

net/http에서 핸들러 등록 취소

net/http에서 핸들러는 런타임에 등록 및 등록 취소될 수 있습니다. 이를 통해 웹 서버를 동적으로 구성할 수 있습니다.

핸들러 등록

다음 코드는 HandlerFactory를 사용하여 런타임에 핸들러를 등록하는 방법을 보여줍니다.

<code class="go">package main

import (
    "fmt"
    "net/http"
)

type MyHandler struct {
    id int
}

func (hf *MyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, r.URL.Path)
}

// Creates MyHandler instances and registers them as handlers at runtime
type HandlerFactory struct {
    handler_id int
}

func (hf *HandlerFactory) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    hf.handler_id++
    handler := MyHandler{hf.handler_id}
    handle := fmt.Sprintf("/%d/", hf.handler_id)
    http.Handle(handle, &amp;handler)
}

func main() {
    factory := HandlerFactory{0}
    http.Handle("/create", &amp;factory)
    http.ListenAndServe("localhost:8080", nil)
}</code>
로그인 후 복사

핸들러 등록 취소

핸들러 등록을 취소하려면 사용자 정의 ServerMux를 생성하여 사용할 수 있습니다. 이 사용자 정의 ServerMux에는 맵에서 패턴-핸들러 매핑을 제거하는 Deregister 메서드가 포함되어 있습니다.

<code class="go">// TODO: check if registered and return error if not.
// TODO: possibly remove the automatic permanent link between /dir and /dir/.
func (mux *MyMux) Deregister(pattern string) error {
    mux.mu.Lock()
    defer mux.mu.Unlock()
    del(mux.m, pattern)
    return nil
}</code>
로그인 후 복사

이 사용자 정의 ServerMux를 사용하면:

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

srv := &amp;http.Server {
    Addr: localhost:8080
    Handler: mux,
}
srv.ListenAndServe()</code>
로그인 후 복사

이 사용자 정의 ServerMux에서 핸들러를 등록 취소하면 다음을 수행할 수 있습니다. ListenAndServe()에 의한 메시지 라우팅에 영향을 주지 않고 다른 고루틴에서 안전하게 수행됩니다.

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

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