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

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

DDD
Lepaskan: 2024-11-24 09:37:10
asal
379 orang telah melayarinya

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)}
}
Salin selepas log masuk

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())
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan