Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah saya boleh melaksanakan pemadanan kad bebas untuk corak URL dalam pengendali HTTP Go?

Bagaimanakah saya boleh melaksanakan pemadanan kad bebas untuk corak URL dalam pengendali HTTP Go?

Patricia Arquette
Patricia Arquetteasal
2024-11-12 19:24:02820semak imbas

How can I implement wildcard matching for URL patterns in Go's HTTP handlers?

Kad liar dalam Corak URL untuk Pengendali HTTP

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!

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