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, &handler) } func main() { factory := HandlerFactory{0} http.Handle("/create", &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", &factory) srv := &http.Server { Addr: localhost:8080 Handler: mux, } srv.ListenAndServe()</code>
이 사용자 정의 ServerMux에서 핸들러를 등록 취소하면 다음을 수행할 수 있습니다. ListenAndServe()에 의한 메시지 라우팅에 영향을 주지 않고 다른 고루틴에서 안전하게 수행됩니다.
위 내용은 Go의 `net/http` 패키지에서 핸들러를 등록 취소하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!