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 サイトの他の関連記事を参照してください。