カスタム ハンドラーを使用したワイルドカードによる高度なハンドラー パターン マッチング
Go でルーティング パターンを定義するために http.HandleFunc を使用する場合、組み込みメカニズムワイルドカードのサポートは提供しません。これは、動的 URL コンポーネントをキャプチャする際の制限要因となる可能性があります。
正規表現パターン マッチングを使用したカスタム ハンドラー
この制限を克服するには、次のようなカスタム ハンドラーを作成することが可能です。正規表現を使用した柔軟なパターン マッチングをサポートします。以下に例を示します:
import ( "net/http" "regexp" ) type route struct { pattern *regexp.Regexp handler http.Handler } type RegexpHandler struct { routes []*route } // Handler adds a route to the custom handler. func (h *RegexpHandler) Handler(pattern *regexp.Regexp, handler http.Handler) { h.routes = append(h.routes, &route{pattern, handler}) } // HandleFunc adds a function-based route to the custom handler. func (h *RegexpHandler) HandleFunc(pattern *regexp.Regexp, handler func(http.ResponseWriter, *http.Request)) { h.routes = append(h.routes, &route{pattern, http.HandlerFunc(handler)}) } // ServeHTTP iterates through registered routes and checks if any pattern matches the request. If a match is found, the corresponding handler is invoked. 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 a 404 response. http.NotFound(w, r) }
使用法:
ワイルドカード パターンを含む URL を処理するカスタム ハンドラーの使用例:
import ( "log" "net/http" ) func main() { rh := &RegexpHandler{} // Define a regular expression for capturing any valid URL string. pattern := regexp.MustCompile(`/groups/.*/people`) rh.HandleFunc(pattern, peopleInGroupHandler) // Start the web server and use the custom handler. log.Fatal(http.ListenAndServe(":8080", rh)) }
Thisこのアプローチにより、カスタム ハンドラー内のパス マッチング ロジックの制御を維持しながら、http.HandleFunc の制限を超えた柔軟なルーティング パターンを構築できます。
以上がGo HTTP ルーティングで「http.HandleFunc」を超えてワイルドカード サポートを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。