首頁 > 後端開發 > Golang > 您可以在「http.HandleFunc」模式中使用萬用字元嗎?

您可以在「http.HandleFunc」模式中使用萬用字元嗎?

DDD
發布: 2024-11-24 09:37:10
原創
379 人瀏覽過

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

HTTP 伺服器中的處理程序模式

使用 http.HandleFunc 時,會出現是否可以將通配符合併到模式中的問題。例如,您可能需要像「/groups//people」這樣的模式,其中星號 () 代表任何有效的 URL 段。

HTTP 處理程序模式限制

不幸的是,http.Handler 模式不是正規表示式或glob,因此不能直接使用通配符

用於模式靈活性的自訂處理程序

要克服此限制,請考慮建立一個利用正規表示式或其他所需模式的自訂HTTP 處理程序。以下是正規表示式的範例:

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)}
}
登入後複製

此處理程序可讓您註冊自訂模式和處理程序,從而提供以更動態的方式匹配 URL 的靈活性。它可以與預設的HTTP伺服器無縫整合:

http.Handle("/", NewRegexpHandler())
登入後複製

以上是您可以在「http.HandleFunc」模式中使用萬用字元嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板