Bagaimanakah Saya Boleh Mengubah Pengendali Mux Secara Dinamik dalam Pelayan HTTP Golang?

Patricia Arquette
Lepaskan: 2024-10-31 15:21:02
asal
210 orang telah melayarinya

How Can I Dynamically Change Mux Handlers in Golang HTTP Servers?

Cara Menukar Pengendali Mux secara Dinamik dalam Pelayan HTTP Golang

In Go, http.ServeMux dan mux.Router Gorilla menyediakan alat serba boleh untuk pengendalian Laluan HTTP. Walau bagaimanapun, tiada mekanisme terbina dalam untuk mengubah suai fungsi pengendali yang dikaitkan dengan laluan sedia ada tanpa memulakan semula aplikasi.

Penyelesaian Kemungkinan:

Pilihan 1 : Pembalut Pengendali Tersuai dengan Bendera Dayakan/Lumpuhkan

Pendekatan ini melibatkan penciptaan jenis pengendali tersuai yang membenamkan fungsi pengendali sebenar dan termasuk bendera yang didayakan. Pengendali tersuai kemudiannya boleh ditambahkan pada mux, yang akan berfungsi kepada pengendali jika bendera ditetapkan kepada benar.

<code class="go">type Handler struct {
    http.HandlerFunc
    Enabled bool
}

type Handlers map[string]*Handler

// Implementation of ServeHTTP that checks if the handler is enabled
func (h Handlers) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    path := r.URL.Path
    if handler, ok := h[path]; ok &amp;&amp; handler.Enabled {
        handler.ServeHTTP(w, r)
    } else {
        http.Error(w, "Not Found", http.StatusNotFound)
    }
}</code>
Salin selepas log masuk

Kemudian, anda boleh menggunakan jenis pengendali tersuai ini dengan http.ServeMux atau gorilla/mux untuk mendayakan atau melumpuhkan laluan secara dinamik.

Contoh dengan http.ServeMux:

<code class="go">mux := http.NewServeMux()
handlers := Handlers{}

handlers.HandleFunc(mux, "/", func(w http.ResponseWriter, r *http.Request) {
    w.Write([]byte("this will show once"))
    handlers["/"].Enabled = false
})

http.Handle("/", mux)</code>
Salin selepas log masuk

Pilihan 2: Middleware dengan Senarai Hitam URL

Sebagai alternatif, anda boleh melaksanakan perisian tengah yang menyemak URL yang diminta terhadap senarai laluan yang dilumpuhkan. Jika URL sepadan dengan laluan yang dilumpuhkan, perisian tengah boleh menghalang pelaksanaan pengendali dan mengembalikan respons tersuai.

Contoh:

<code class="go">func DisableRouteMiddleware(disabledRoutes []string) func(http.Handler) http.Handler {
    return func(next http.Handler) http.Handler {
        return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
            for _, route := range disabledRoutes {
                if r.URL.Path == route {
                    http.Error(w, "Disabled", http.StatusNotFound)
                    return
                }
            }
            next.ServeHTTP(w, r)
        })
    }
}</code>
Salin selepas log masuk

Anda kemudian boleh menggunakan perisian tengah ini untuk membalut semua pengendali anda sebelum menambahkannya pada mux.

Kedua-dua pendekatan membolehkan anda melumpuhkan atau mendayakan laluan secara dinamik dalam aplikasi anda tanpa memerlukan dimulakan semula. Pilihan pilihan untuk digunakan bergantung pada keperluan khusus anda dan tahap fleksibiliti yang anda perlukan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengubah Pengendali Mux Secara Dinamik dalam Pelayan HTTP Golang?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!