Corak Pengendali dalam Pelayan HTTP
Apabila menggunakan http.HandleFunc, persoalan timbul sama ada kemungkinan untuk memasukkan kad bebas ke dalam corak. Sebagai contoh, anda mungkin menginginkan corak seperti "/groups//people" dengan asterisk () mewakili mana-mana segmen URL yang sah.
Had Corak Pengendali HTTP
Malangnya, http.Corak pengendali bukan ungkapan biasa atau glob, oleh itu kad bebas tidak boleh terus ditentukan.
Pengendali Tersuai untuk Kelenturan Corak
Untuk mengatasi pengehadan ini, pertimbangkan untuk mencipta pengendali HTTP tersuai yang memanfaatkan ungkapan biasa atau corak lain yang dikehendaki. Berikut ialah contoh dengan ungkapan biasa:
import ( "net/http" "regexp" ) type RegexpHandler struct { routes []*route } type route struct { pattern *regexp.Regexp handler http.Handler } // Register handlers with custom patterns func (h *RegexpHandler) Handler(pattern *regexp.Regexp, handler http.Handler) { h.routes = append(h.routes, &route{pattern, handler}) } func (h *RegexpHandler) HandleFunc(pattern *regexp.Regexp, handler func(http.ResponseWriter, *http.Request)) { h.routes = append(h.routes, &route{pattern, http.HandlerFunc(handler)}) } // Process HTTP requests and route to appropriate handler based on custom patterns func (h *RegexpHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { for _, route := range h.routes { if route.pattern.MatchString(r.URL.Path) { route.handler.ServeHTTP(w, r) return } } // No pattern matched, return 404 http.NotFound(w, r) } func NewRegexpHandler() *RegexpHandler { return &RegexpHandler{routes: make([]*route, 0)} }
Pengendali ini membolehkan anda mendaftarkan corak dan pengendali tersuai, memberikan fleksibiliti untuk memadankan URL dengan cara yang lebih dinamik. Ia boleh disepadukan dengan lancar dengan pelayan HTTP lalai:
http.Handle("/", NewRegexpHandler())
Atas ialah kandungan terperinci Bolehkah Anda Menggunakan Kad Liar dalam Corak `http.HandleFunc`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!