Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menyahdaftar Pengendali dalam Pakej `net/http` Go?

Bagaimana untuk Menyahdaftar Pengendali dalam Pakej `net/http` Go?

DDD
DDDasal
2024-11-05 15:08:02427semak imbas

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

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, &amp;handler)
}

func main() {
    factory := HandlerFactory{0}
    http.Handle("/create", &amp;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", &amp;factory)

srv := &amp;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!

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