Pengendali Mengemas Kini Secara Dinamik dalam HTTP Mux Go
Dalam aplikasi web, selalunya wajar untuk mengubah suai atau menggantikan laluan tanpa perlu memulakan semula pelayan. Walaupun tiada sokongan terbina dalam untuk ini dalam http.NewServeMux Go atau Gorilla's mux.Router, adalah mungkin untuk melaksanakannya menggunakan struktur tersuai.
Struktur Pengendali Tersuai
Penyelesaiannya melibatkan mencipta struktur Pengendali tersuai yang merangkumi kedua-dua fungsi pengendali dan bendera Didayakan:
<code class="go">type Handler struct { http.HandlerFunc Enabled bool }</code>
Peta Pengendali
Peta pengendali digunakan untuk menyimpan pengendali tersuai yang dikaitkan dengan corak laluan yang berbeza:
<code class="go">type Handlers map[string]*Handler</code>
Pengendali HTTP
Pengendali HTTP tersuai dilaksanakan untuk menyemak sama ada pengendali didayakan untuk laluan URL yang diberikan :
<code class="go">func (h Handlers) ServeHTTP(w http.ResponseWriter, r *http.Request) { path := r.URL.Path if handler, ok := h[path]; ok && handler.Enabled { handler.ServeHTTP(w, r) } else { http.Error(w, "Not Found", http.StatusNotFound) } }</code>
Menyepadukan dengan Mux
Pengendali tersuai boleh disepadukan dengan http.NewServeMux atau mux.Router dengan melaksanakan kaedah HandleFunc:
<code class="go">func (h Handlers) HandleFunc(mux HasHandleFunc, pattern string, handler http.HandlerFunc) { h[pattern] = &Handler{handler, true} mux.HandleFunc(pattern, h.ServeHTTP) }</code>
Contoh
Berikut ialah contoh yang melumpuhkan pengendali secara dinamik selepas permintaan pertama:
<code class="go">package main import ( "fmt" "net/http" ) func main() { mux := http.NewServeMux() handlers := Handlers{} handlers.HandleFunc(mux, "/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprint(w, "Welcome!") handlers["/"].Enabled = false }) http.Handle("/", mux) http.ListenAndServe(":9020", nil) }</code>
Kesimpulan
Menggunakan pengendali tersuai, anda boleh mendayakan dan melumpuhkan laluan secara dinamik dalam HTTP mux Go tanpa memulakan semula pelayan. Ini memberikan lebih fleksibiliti dan kawalan ke atas gelagat aplikasi serta boleh menyelaraskan tugas pembangunan dan penyelenggaraan.
Atas ialah kandungan terperinci Bagaimanakah saya boleh mengemas kini pengendali secara dinamik dalam HTTP mux Go tanpa memulakan semula pelayan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!