net/http에서 런타임 등록 핸들러를 처리하려면 사용자 정의 접근 방식이 필요합니다. HTTP 서버는 핸들러 등록을 위한 메커니즘을 제공하지만 이를 동적으로 등록 취소하는 기능은 부족합니다.
핸들러를 동적으로 생성하고 등록하려면 사용자 정의 HandlerFactory를 사용할 수 있습니다. 고유한 ID를 가진 새 핸들러를 생성하고 http.Handle을 사용하여 등록하도록 설계할 수 있습니다. 예를 들어, "/create" 핸들러는 증가하는 ID로 MyHandler 인스턴스를 생성하고 이를 특정 URL 패턴에 매핑할 수 있습니다.
<code class="go">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) }</code>
등록되지 않은 핸들러를 제공하려면 다음이 필요합니다. 원래 ServeMux를 확장하고 등록 취소 방법을 포함하는 사용자 정의 ServerMux를 생성합니다.
<code class="go">type MyMux struct { http.ServeMux mu sync.Mutex } func (mux *MyMux) Deregister(pattern string) error { mux.mu.Lock() defer mux.mu.Unlock() del(mux.m, pattern) // Handle additional error checking or setup here }</code>
이 사용자 정의 ServerMux를 사용하려면 새 서버를 인스턴스화하고 래핑할 수 있습니다. http.Handler를 사용하여 HTTP 서버 내에서 처리합니다.
<code class="go">mux := new(MyMux) mux.Handle("/create", &factory) srv := &http.Server{ Addr: "localhost:8080", Handler: mux, } go srv.ListenAndServe() // Deregister handlers as needed mux.Deregister("/123/*")</code>
이 접근 방식을 사용하면 핸들러를 동적으로 등록 및 등록 취소할 수 있어 런타임에서 생성된 URL 패턴을 처리하는 데 필요한 유연성을 제공할 수 있습니다.
위 내용은 Go의 net/http 패키지에서 HTTP 핸들러를 어떻게 동적으로 등록하고 등록 취소할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!