Rumah >pembangunan bahagian belakang >Golang >Bolehkah Anda Menggunakan Kad Liar dalam Corak `http.HandleFunc`?

Bolehkah Anda Menggunakan Kad Liar dalam Corak `http.HandleFunc`?

DDD
DDDasal
2024-11-24 09:37:10432semak imbas

Can You Use Wildcards in `http.HandleFunc` Patterns?

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!

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