ARTICLES

【Go】ルーティングライブラリgo-chiの使い方

公開日
2020-08-13
関連技術
Go

go-chi

とかがあると思います(他にもあるけど省略)が、go-chiやgorillaはその中でもフレームワークとして使いやすいながらにハンドラでは標準パッケージのnet/httpをそのまま使用できたり導入しやすい部類に入ると思います。実際に見ていきましょう。

 $ go get github.com/go-chi/chi

使っていきます

まずはハンドラを定義します。ハンドラ自体はnet/httpを使うので、ライブラリを消したくなった場合はルーティングの記述だけを変更すれば良いです。

package handler

func Get(w http.ResponseWriter, req *http.Request) {
  // ハンドラを記述
  fmt.Println("呼ばれた")
  return
}

ルーティングでハンドラを呼び出します。

package router

type Router struct {
  chi.Router
}

func Init() *Router {
r := chi.NewRouter()
return &Router{r}
}

func (r *Router) Routes() {
  r.Get("/", handler.Get)
}

func (r *Router) Run() {
    port := "8080"
    log.Printf("ポート番号 %s で待ち受けています。", port)
    log.Fatal(http.ListenAndServe(fmt.Sprintf(":%s", port), r))
}

これをmainで呼び出します。

func main() {
    r := router.Init()
    r.Routes()
    r.Run()

これでlocalhost:8080/hogeにアクセスすると、「呼ばれた」がコンソール上に表示されるはずです。

必要最低限の実装は終わりですが、さらに下のようにmiddlewareをかましたり、Group化させることもできます。

func (r *Router) Routes() {
    r.Route("/api", func(r chi.Router) {
        r.Route("/v1", func(r chi.Router) {
            r.Group(func(r chi.Router) {  // Group
                r.Use(middleware1)  // このGroup内のみmiddleware適用
                r.Route("/me", func(r chi.Router) {
                    r.Get("/", handler1) // ルーティング: /api/v1/me
                })
            })
            r.Route("/review", func(r chi.Router) {
                r.Get("/{ID}", handler2) //ルーティング: /api/v1/review/{ID}
            })
        })
    })
}

以上です。質問・訂正あればお願いいたします。ありがとうございました。

技術記事の一覧へ戻るお問い合わせ ↗