Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Melaksanakan Sokongan Wildcard dalam Go HTTP Routing Beyond `http.HandleFunc`?

Bagaimana untuk Melaksanakan Sokongan Wildcard dalam Go HTTP Routing Beyond `http.HandleFunc`?

Susan Sarandon
Susan Sarandonasal
2024-11-14 12:17:02654semak imbas

How to Implement Wildcard Support in 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn