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")まとめ
ルーティングはプログラムの上から順番に決定していきます。
他のプログラミング言語でも同じようなことがあったので、ルーティング処理を書く際は注意が必要です。
Amazon:初めてのGo言語 ―他言語プログラマーのためのイディオマティックGo実践ガイド
Go言語:ローカルでos.Getenv()でenvが環境変数が読み込まれない場合
ローカルでos.Getenv()を使う際、envがなかなか読み込まれなかったので、備忘録として、読み込み方を残します。
結論
macの場合は.zshrcに書きましょう。