人権真骨頂

とくがたかいことでゆうめい

labstack/echo で http.HandleFuncをラップする

func handler(w http.ResponseWriter, r *http.Request) {
  fmt.Fprint(w, "Hello")
}

ってな感じの, func(http.ResponseWriter, *http.Request)echo.HandlerFunc として利用したいときは,こうすれば良い.

e := echo.New()
e.GET("/hello", standard.WrapHandler(http.HandlerFunc(handler)))

これで,利用できるようになる. standard.WrapHandlerhttp.Handler を受け取って, standard.HandlerFunc を返す. http.Handler を受け取るようになっているので, handlerhttp.HandlerFunc に渡してあげて, http.Handler にしてあげる必要がある.

ミドルウェアをラップするのは更に簡単で,こんな感じのミドルウェアがあるとする.

func middleware(next http.Handler) http.Handler {
  return http.HandleFunc(func (w http.ResponseWriter, r *http.Request) {
    println("middleware")
    next.ServeHTTP(w,r)
  })
}

これをEchoで利用するには,こうすれば良い.

e := echo.New()
e.Use(standard.WrapMiddleware(middleware))

これでOK.