Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana Saya Boleh Menyahdaftar Pengendali dalam Pakej net/http?

Bagaimana Saya Boleh Menyahdaftar Pengendali dalam Pakej net/http?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-07 00:04:03919semak imbas

How Can I Unregister Handlers in the net/http Package?

Nyahdaftar Pengendali dalam net/http

Dalam net/http, pengendali boleh didaftarkan secara dinamik pada corak URL tertentu menggunakan http.Handle fungsi. Walau bagaimanapun, pemultipleks lalai tidak menyediakan mekanisme untuk menyahdaftar pengendali.

Satu pendekatan untuk menyahdaftar pengendali adalah dengan mencipta pemultipleks tersuai yang memanjangkan jenis http.ServeMux standard. Pemultipleks tersuai ini boleh memasukkan kaedah untuk membatalkan pendaftaran pengendali. Sebagai contoh, kod berikut mentakrifkan pemultipleks tersuai yang menambahkan kaedah Deregister:

<code class="go">type MyMux struct {
    *http.ServeMux
    mu sync.Mutex // Guards the m map
    m  map[string]http.Handler
}

func (mux *MyMux) Deregister(pattern string) error {
    mux.mu.Lock()
    defer mux.mu.Unlock()
    if _, ok := mux.m[pattern]; !ok {
        return errors.New("handler not registered")
    }
    delete(mux.m, pattern)
    return nil
}</code>

Setelah pemultipleks tersuai ditakrifkan, ia boleh digunakan untuk mengendalikan permintaan. Contohnya:

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

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

Memanggil kaedah Deregister pada pemultipleks tersuai akan menghentikan pengendali yang sepadan daripada melayan permintaan. Ambil perhatian bahawa pengendali mesti didaftarkan menggunakan contoh pemultipleks tersuai yang sama agar pembatalan pendaftaran berkesan.

Atas ialah kandungan terperinci Bagaimana Saya Boleh Menyahdaftar Pengendali dalam Pakej net/http?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn