Go言語:ルーティング(gorilla)の優先順位について
Go言語のルーティング(gorilla)処理では、記載順序が重要です。
/hoge/{id※任意のID},/hoge/list の二つのAPIを開発したい場合を例に説明します。
/hoge/{id※任意のID},/hoge/list の順に実装した場合
下記のように実装して、/hoge/listでリクエストを投げると、「{id}」が任意の文字という意味になるため、/hoge/{id}が呼ばれます。
r.HandleFunc("/hoge/{id}", func(w http.ResponseWriter, r *http.Request) {}).Methods("GET")
r.HandleFunc("/hoge/list", func(w http.ResponseWriter, r *http.Request) {}).Methods("GET")/hoge/list,/hoge/{id※任意のID} の順に実装した場合
/hoge/listと/hoge/{id※任意のID}を別のAPIとしたい場合は、下記のように実装しましょう。
これで/hoge/listが先に呼ばれるようになります。
r.HandleFunc("/hoge/list", func(w http.ResponseWriter, r *http.Request) {}).Methods("GET")
r.HandleFunc("/hoge/{1}", func(w http.ResponseWriter, r *http.Request) {}).Methods("GET")まとめ
ルーティングはプログラムの上から順番に決定していきます。
他のプログラミング言語でも同じようなことがあったので、ルーティング処理を書く際は注意が必要です。