[解決済み] http.HandleFuncのパターンにおけるワイルドカードについて
2023-05-19 01:46:46
質問
Go (言語) でハンドラを登録する際、パターンにワイルドカードを指定する方法はありますか?
例えば
http.HandleFunc("/groups/*/people", peopleInGroupHandler)
ここで
*
は任意の有効なURL文字列である可能性があります。 あるいは、唯一の解決策は
/groups
にマッチさせ、残りはハンドラの中で考えるしかないのでしょうか (
peopleInGroupHandler
)関数の中で残りの部分を把握するのですか?
どのように解決するのですか?
http.Handler と http.HandleFunc のパターンは、正規表現でもグロブでもありません。ワイルドカードを指定する方法はありません。これらは文書化されています。 を参照してください。 .
とはいえ、正規表現や他の種類のパターンを使用できる独自のハンドラを作成することはそれほど難しくありません。以下に正規表現を使用したものを示します (コンパイル済み、ただし未テスト)。
type route struct {
pattern *regexp.Regexp
handler http.Handler
}
type RegexpHandler struct {
routes []*route
}
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)
}
関連
-
[解決済み】REエラー:Mac OS Xでの不正なバイトシーケンス
-
[解決済み] MACアドレスの正規表現とは何ですか?
-
[解決済み] 与えられた文字列が与えられた部分文字列を含んでいるかどうかを見つけるための、scala の慣用的な方法は何ですか?
-
[解決済み] Regex for string contains?
-
[解決済み] 一致した正規表現パターンを awk で表示するには?
-
[解決済み] Githubの「ブランチ名パターン」の否定
-
[解決済み] JavaScriptの正規表現でマッチしたグループにアクセスするにはどうすればよいですか?
-
[解決済み】アクセント記号付き文字(ダイアクリティック)の具体的なJavaScript正規表現について)
-
[解決済み】Regexで一部のグループのみを置換する。
-
[解決済み] PHP の preg_match_all() のように、JavaScript の正規表現で複数回マッチさせるにはどうしたらよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン