Apabila mendaftar pengendali dengan http.HandleFunc atau http.Handler, adalah wajar untuk menentukan kad bebas dalam corak URL untuk memadankan berbilang laluan . Sebagai contoh, seseorang mungkin ingin menentukan pengendali untuk semua permintaan seperti /groups/*/people.
Malangnya, padanan corak lalai untuk pengendali HTTP dalam Go tidak menyokong kad bebas. Corak bukan ungkapan biasa atau glob, dan tiada cara terbina dalam untuk menyatakan laluan kad bebas.
Satu penyelesaian ialah menjana fungsi pengendali tersuai yang menggunakan ungkapan biasa untuk memadankan corak yang lebih kompleks. Berikut ialah contoh pengendali tersuai yang menyokong ungkapan biasa:
import ( "net/http" "regexp" ) type RegexpHandler struct { routes []*route } type route struct { pattern *regexp.Regexp handler http.Handler } 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)}) } 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; send 404 response http.NotFound(w, r) }
Pengendali tersuai ini membolehkan anda menentukan corak ungkapan biasa dan mengaitkannya dengan fungsi pengendali. Apabila permintaan masuk, pengendali menyemak laluan permintaan terhadap coraknya dan menghantar kepada pengendali yang berkaitan jika padanan ditemui.
Walaupun pendekatan ini memberikan lebih fleksibiliti, ia memerlukan usaha pembangunan tambahan dan memperkenalkan pergantungan pada ungkapan biasa. Namun begitu, ia adalah pilihan yang berdaya maju untuk padanan corak URL kompleks dengan http.HandleFunc.
Atas ialah kandungan terperinci Bagaimanakah saya boleh melaksanakan pemadanan kad bebas untuk corak URL dalam pengendali HTTP Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!