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

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

DDD
Lepaskan: 2024-11-05 15:08:02
asal
490 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan