कस्टम हैंडलर का उपयोग करके वाइल्डकार्ड के साथ उन्नत हैंडलर पैटर्न मिलान
गो में रूटिंग पैटर्न को परिभाषित करने के लिए http.HandleFunc का उपयोग करते समय, अंतर्निहित तंत्र वाइल्डकार्ड समर्थन की पेशकश न करें. यह डायनामिक URL घटकों को कैप्चर करने के लिए एक सीमित कारक हो सकता है।
नियमित अभिव्यक्ति पैटर्न मिलान के साथ कस्टम हैंडलर
इस सीमा को पार करने के लिए, एक कस्टम हैंडलर बनाना संभव है नियमित अभिव्यक्तियों का उपयोग करके लचीले पैटर्न मिलान का समर्थन करता है। यहां एक उदाहरण है:
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) }
उपयोग:
वाइल्डकार्ड पैटर्न वाले यूआरएल को संभालने के लिए कस्टम हैंडलर का उदाहरण उपयोग:
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)) }
यह दृष्टिकोण आपको कस्टम हैंडलर के भीतर पथ मिलान तर्क पर नियंत्रण बनाए रखते हुए http.HandleFunc की सीमाओं से परे लचीले रूटिंग पैटर्न बनाने की अनुमति देता है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3