Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah saya boleh Menyahdaftar Pengendali dalam Pakej `net/http` Go?

Bagaimanakah saya boleh Menyahdaftar Pengendali dalam Pakej `net/http` Go?

Susan Sarandon
Susan Sarandonasal
2024-11-05 14:33:021018semak imbas

How can I Unregister Handlers in Go's `net/http` Package?

Nyahdaftar Pengendali dalam net/http

Dalam net/http, mendaftar pengendali mengaitkan corak URL dengan pengendali HTTP tertentu. Walau bagaimanapun, mungkin terdapat keperluan untuk menyahdaftar pengendali semasa runtime, sama seperti membuat pengendali untuk corak URL.

Contoh yang diberikan menunjukkan penciptaan kilang pengendali untuk mencipta pengendali secara dinamik untuk URL seperti "/123 /" dan daftarkan mereka. URL "/destroy/123" yang sepadan tiada untuk menyahdaftar pengendali untuk "/123/".

Untuk melaksanakan fungsi nyahdaftar, ServerMux tersuai boleh dibuat dengan menyalin kod daripada GOROOT /src/pkg/net/http/server.go. ServerMux tersuai akan memerlukan kaedah untuk membatalkan pendaftaran. Ini boleh dilaksanakan dengan mengunci peta dan memadamkan entri yang dikaitkan dengan corak.

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

Untuk menggunakan mux tersuai ini, ia boleh dikonfigurasikan sebagai Pengendali untuk pelayan HTTP. Mengubah suai mux dengan memanggil deregister() daripada goroutine lain adalah selamat dan akan menjejaskan penghalaan mesej oleh ListenAndServe().

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

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

Dengan melaksanakan ServerMux tersuai dengan kaedah penyahdaftaran, ia menjadi mungkin untuk mengurus pengendali secara dinamik dan nyahdaftarkannya pada masa jalan.

Atas ialah kandungan terperinci Bagaimanakah saya boleh Menyahdaftar Pengendali dalam Pakej `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