LoginSignup
4
0

More than 3 years have passed since last update.

【Go】echoでハマったこと

Posted at

echoを使っていてハマったことまとめ

概要

Go言語のWebフレームワークであるechoを使っていてハマったことについて、メモとしてまとめていこうと思います。

middleware

CORS

CORSWithConfig()の戻り値とe.Use()の引数が不一致

事象

自分の作ったフロントエンドからのみアクセスできるようにカスタムCORS設定をしようとして以下のようなコードを作成しました。

package main

import (
    "net/http"

    "github.com/labstack/echo/middleware"
    "github.com/labstack/echo/v4"
)

func main() {
    e := echo.New()
    e.Use(middleware.CORSWithConfig(middleware.CORSConfig{
        AllowOrigins: []string{"http://localhost:3000"},
        AllowMethods: []string{http.MethodGet, http.MethodPut, http.MethodPost, http.MethodDelete},
    }))
    e.GET("/public", public)
    e.Logger.Fatal(e.Start(":1323"))
}

func public(c echo.Context) error {
    return c.String(http.StatusOK, "hello public!")
}

すると、以下のようなエラーに遭遇しました。

cannot use middleware.CORSWithConfig(middleware.CORSConfig literal) (type "github.com/labstack/echo".MiddlewareFunc) as type "github.com/labstack/echo/v4".MiddlewareFunc in argument to e.Use

どうやらe.Use()ではv4MiddlewareFunを引数として要求しているようですが、
CORSWithConfig()の戻り値はv4ではないMiddlewareFunらしいです。

解決策

最初は、キャストすればいいかと思ったのですが、うまくいきませんでした。
そこで、少し調べてみるととても簡単なことで、自分がGoのバージョン管理などに不慣れなことが原因でした。

問題の箇所は、以下のimoprt文になります。

    "github.com/labstack/echo/middleware"
    "github.com/labstack/echo/v4"

ここで、echoについてはv4を指定してインポートしているのですが、middlewareは何も指定しておりません。
そのため、インポートされたmiddlewareechoの間でバージョンの不一致が起きてしまい先ほどのエラーが生じたようです。

解決策は、簡単で以下のようにmiddlewareにもv4を付けてあげるだけ。

    "github.com/labstack/echo/v4/middleware"

これでエラーは出なくなり、無事にCORSの設定ができました。

終わりに

今後もechoを使う中で自分がハマったことや、コメントでいただいたハマりポイントについて書いていきたいと思います。
何かご指摘や、ハマりポイントなどありましたらコメントよろしくお願いします。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0