Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk membatalkan pendaftaran Pengendali HTTP dalam net/http Go?

Bagaimana untuk membatalkan pendaftaran Pengendali HTTP dalam net/http Go?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-05 17:01:02900semak imbas

How to Deregister HTTP Handlers in Go's net/http?

Kendalikan Penyahdaftaran dalam net/http

Pengendali HTTP dalam net/http boleh didaftarkan secara dinamik dan tidak didaftarkan untuk memberikan fleksibiliti dalam mengendalikan permintaan. Untuk menyahdaftar pengendali, ServerMux tersuai boleh dibuat.

Melaksanakan ServerMux Tersuai

Salin kod untuk ServerMux daripada kod sumber Go (GOROOT/src/pkg /net/http/server.go, talian 837-939). Tambahkan kaedah Deregister pada ServerMux tersuai untuk mengalih keluar pengendali daripada pemetaan corak-ke-Pengendali:

<code class="go">func (mux *MyMux) Deregister(pattern string) error {
    mux.mu.Lock()
    defer mux.mu.Unlock()
    del(mux.m, pattern)
    return nil
}</code>

Penggunaan

Buat contoh ServerMux tersuai dan kendalikan laluan "/create" seperti biasa:

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

Tetapkan ServerMux tersuai sebagai Pengendali untuk pelayan HTTP:

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

Nyahdaftar

Untuk menyahdaftar pengendali, cuma panggil kaedah Deregister pada ServerMux:

<code class="go">mux.Deregister("/123/*")</code>

Ini akan mengubah suai gelagat penghalaan pelayan dan permintaan seterusnya kepada "/123/*" tidak lagi dikendalikan oleh pengendali yang berdaftar sebelum ini.

Pengubahsuaian Selamat

Mengubah suai ServerMux dengan memanggil deregister() daripada goroutine lain adalah selamat dan akan mengemas kini logik penghalaan untuk pelayan.

Atas ialah kandungan terperinci Bagaimana untuk membatalkan pendaftaran Pengendali HTTP dalam net/http Go?. 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