Golang での URL 処理での正規表現の使用
Golang では、http.HandleFunc() メソッドを使用して HTTP の URL パターンを登録できます。リクエストの処理。ただし、この方法では、パターン マッチングに正規表現を使用することはサポートされていません。このため、正規表現を使用して URL パターンに基づいて適切な関数処理を決定する方法が問題になります。
標準ライブラリの http.HandleFunc() は、URL マッチングの正規表現をサポートしていません。代わりに、固定されたルート付きパス (「/favicon.ico」など) またはルート付きサブツリー (「/images/」など) のみと一致します。長いパターンは短いパターンより優先されますが、オプションは限られています。
この制限を克服して URL パターンに正規表現を使用するには、ルート URL パターンをより汎用的なパターンでオーバーライドできます。ハンドラー関数内で、特定の URL パスに基づいてさらに正規表現の照合とルーティングを実行できます。
正規表現を使用してリクエストをルーティングする
次のコードは、その方法を示しています。 URL ルーティングに正規表現を使用するには:
import ( "fmt" "net/http" "regexp" ) func main() { http.HandleFunc("/", route) http.ListenAndServe(":8080", nil) } var rNum = regexp.MustCompile(`\d`) // Has digit(s) var rAbc = regexp.MustCompile(`abc`) // Contains "abc" func route(w http.ResponseWriter, r *http.Request) { switch { case rNum.MatchString(r.URL.Path): digits(w, r) case rAbc.MatchString(r.URL.Path): abc(w, r) default: w.Write([]byte("Unknown Pattern")) } } func digits(w http.ResponseWriter, r *http.Request) { w.Write([]byte("Has digits")) } func abc(w http.ResponseWriter, r *http.Request) { w.Write([]byte("Has abc")) }
この例では、main 関数はルート URL を登録します。 ("/") をワイルドカード パターンとして使用します。 Route() 関数内では、正規表現 (rNum と rAbc) を使用して、2 つの特定の URL パターン、つまり少なくとも 1 桁の数字を含むパス (例: "/123") と文字列 "abc" を含むパス (例: "/) を照合します。 ABCDE」)。リクエストがいずれかのパターンに一致する場合、適切な関数 (たとえば、digits() または abc()) が実行されます。それ以外の場合は、デフォルトのメッセージが表示されます。
代替アプローチ
上記のアプローチに加えて、Gorilla MUX などの外部ライブラリを使用することもできます。正規表現をサポートするルーティング メカニズム。
以上がGo の `http.HandleFunc()` で URL ルーティングに正規表現を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。