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")
まとめ
ルーティングはプログラムの上から順番に決定していきます。
他のプログラミング言語でも同じようなことがあったので、ルーティング処理を書く際は注意が必要です。