「http.HandleFunc」パターンでワイルドカードを使用できますか?

DDD
リリース: 2024-11-24 09:37:10
オリジナル
368 人が閲覧しました

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

HTTP サーバーのハンドラー パターン

http.HandleFunc を利用する場合、パターンにワイルドカードを組み込むことができるかどうかという疑問が生じます。たとえば、「/groups//people」のようなパターンが必要な場合があります。アスタリスク () は有効な URL セグメントを表します。

HTTP ハンドラー パターンの制限事項

残念ながら、http.Handler パターンは正規表現やグロブではないため、ワイルドカードを直接使用することはできません。

パターンの柔軟性のためのカスタム ハンドラー

この制限を克服するには、正規表現またはその他の必要なパターンを活用するカスタム 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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート