Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Melaksanakan Sokongan Wildcard dalam Go HTTP Routing Beyond `http.HandleFunc`?
Pemadanan Corak Pengendali Lanjutan dengan Kad Liar menggunakan Pengendali Tersuai
Apabila menggunakan http.HandleFunc untuk menentukan corak penghalaan dalam Go, mekanisme terbina dalam jangan tawarkan sokongan kad bebas. Ini boleh menjadi faktor pengehad untuk menangkap komponen URL dinamik.
Pengendali Tersuai dengan Padanan Corak Ungkapan Biasa
Untuk mengatasi pengehadan ini, adalah wajar untuk mencipta pengendali tersuai yang menyokong padanan corak fleksibel menggunakan ungkapan biasa. Berikut ialah contoh:
import ( "net/http" "regexp" ) type route struct { pattern *regexp.Regexp handler http.Handler } type RegexpHandler struct { routes []*route } // Handler adds a route to the custom handler. func (h *RegexpHandler) Handler(pattern *regexp.Regexp, handler http.Handler) { h.routes = append(h.routes, &route{pattern, handler}) } // HandleFunc adds a function-based route to the custom handler. func (h *RegexpHandler) HandleFunc(pattern *regexp.Regexp, handler func(http.ResponseWriter, *http.Request)) { h.routes = append(h.routes, &route{pattern, http.HandlerFunc(handler)}) } // ServeHTTP iterates through registered routes and checks if any pattern matches the request. If a match is found, the corresponding handler is invoked. 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 a 404 response. http.NotFound(w, r) }
Penggunaan:
Contoh penggunaan pengendali tersuai untuk mengendalikan URL dengan corak kad bebas:
import ( "log" "net/http" ) func main() { rh := &RegexpHandler{} // Define a regular expression for capturing any valid URL string. pattern := regexp.MustCompile(`/groups/.*/people`) rh.HandleFunc(pattern, peopleInGroupHandler) // Start the web server and use the custom handler. log.Fatal(http.ListenAndServe(":8080", rh)) }
Ini pendekatan membolehkan anda membina corak penghalaan yang fleksibel melebihi had http.HandleFunc sambil mengekalkan kawalan ke atas laluan logik yang sepadan dalam pengendali tersuai.
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Sokongan Wildcard dalam Go HTTP Routing Beyond `http.HandleFunc`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!