2017-07-20 12 views
3

mux.Routerからいくつかのルートだけを一致させたいと思います。これどうやってするの?ゴリラmux.Routerからいくつかのパスをフィルタリングする方法

はすなわち:これらのパスを持つ:

/general/baz/bro 
/general/foo/bar 
/general/unknown 

を私はデフォルトのハンドラで特定のハンドラを持つ最初の、そして他のすべてにマッチしたいと思います。

私のようなノー成功何かを試してみた

:私はこれを達成するために、他の全ての/general

+0

regexpを試すことができます。私は、それは理想的な方法ではないと思うが、おそらく助けることができます: 'get:= repo.Methods(" GET ")Subrouter()' 'get.Handle("/general/baz/bro "、bazBroHandler) ' 'get.Handle("/general/{unknown:[0-9A-Za-z] +} "、defaultHandler)' – bayrinat

答えて

0

私はちょうど私が順序を反転させるために必要なことに気づきました最終的には:

r.Methods("GET").Path("/general/baz/bro").Handler(bazBroHandler) 
r.Methods("GET").PathPrefix("/general").Handler(defaultHandler) 

今ではすべてが動作しています!

0

で始まる一つの方法がある/general/baz/broパスを扱うbazBroHandlerを期待し、そしてたDefaultHandlerた

r.Methods("GET").PathPrefix("/general").Handler(defaultHandler) 
r.Methods("GET").Path("/general/baz/bro").Handler(bazBroHandler) 

MatcherFuncを使用してください。 MatcherFuncでは、すなわち、着信要求Pathを検証/比較:

//Default handler 
r.MatcherFunc(func(r *http.Request, rm *mux.RouteMatch) bool { 
    return r.URL.Path != "/general/baz/bro" && strings.HasPrefix(r.URL.Path, "/general") && r.Method == "GET" 
}).Handler(defaultHandler) 

//Specific handler 
r.Methods("GET").Path("/general/baz/bro").Handler(bazBroHandler) 
関連する問題