Nyahdaftar Pengendali dalam net/http
Dalam net/http, pengendali boleh didaftarkan dan tidak didaftarkan pada masa jalankan. Ini membenarkan konfigurasi dinamik pelayan web.
Pendaftaran Pengendali
Kod berikut menunjukkan cara mendaftar pengendali pada masa jalan menggunakan 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>
Menyahdaftar Pengendali
Untuk menyahdaftar pengendali, ServerMux tersuai boleh dibuat dan digunakan. ServerMux tersuai ini termasuk kaedah Deregister yang mengalih keluar pemetaan corak kepada pengendali daripada peta:
<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>
Menggunakan ServerMux tersuai ini:
<code class="go">mux := newMux() mux.Handle("/create", &factory) srv := &http.Server { Addr: localhost:8080 Handler: mux, } srv.ListenAndServe()</code>
Menyahdaftar pengendali daripada ServerMux tersuai ini boleh dilakukan dengan selamat dari goroutine lain, tanpa menjejaskan penghalaan mesej oleh ListenAndServe().
Atas ialah kandungan terperinci Bagaimana untuk Menyahdaftar Pengendali dalam Pakej `net/http` Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!