go-chi
- net/http
- go-chi
- gorilla
- echo
とかがあると思います(他にもあるけど省略)が、go-chiやgorillaはその中でもフレームワークとして使いやすいながらにハンドラでは標準パッケージのnet/httpをそのまま使用できたり導入しやすい部類に入ると思います。実際に見ていきましょう。
$ go get github.com/go-chi/chi
使っていきます
まずはハンドラを定義します。ハンドラ自体はnet/httpを使うので、ライブラリを消したくなった場合はルーティングの記述だけを変更すれば良いです。
handler.go
package handler
func Get(w http.ResponseWriter, req *http.Request) {
// ハンドラを記述
fmt.Println("呼ばれた")
return
}
ルーティングでハンドラを呼び出します。
router.go
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で呼び出します。
main.go
func main() {
r := router.Init()
r.Routes()
r.Run()
これでlocalhost:8080/hogeにアクセスすると、「呼ばれた」がコンソール上に表示されるはずです。
必要最低限の実装は終わりですが、さらに下のようにmiddlewareをかましたり、Group化させることもできます。
router.go
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}
})
})
})
}
以上です。質問・訂正あればお願いいたします。ありがとうございました。