Исправление ошибки при запуске сервера на языке GO

Рейтинг: 0Ответов: 1Опубликовано: 08.08.2023

Потребовалось поднять сервер который при обращении к нему захватывают запросы к некоторым портам, для этого решил использовать проект на гит-хабе(https://github.com/ArturSS7/TukTuk), но при компиляции у меня возникла ошибка с 2 модулями backend.go и login.go. В первом у ругается на создание сессии

    domain = Domain
    e := echo.New()
    //pass db pointer to echo handler
    t := &Template{
        templates: template.Must(template.ParseGlob("frontend/templates/*")),
    }
    secret := []byte(RandStringBytes(20))
    e.AutoTLSManager.Cache = autocert.DirCache("/var/www/.cache")
    e.Use(session.Middleware(sessions.NewCookieStore(secret))) // ВОТ ТУТ ОШИБКА
    e.Renderer = t
    e.Use(func(h echo.HandlerFunc) echo.HandlerFunc {
        return func(c echo.Context) error {
            cc := &database.DBContext{Context: c, Db: db}
            return h(cc)
        }
    }) 

Во втором же файле компилятор ругается на переменные c в отрывке

    sess, _ := session.Get("session", c) // ТУТ
    sess.Values["username"] = login
    sess.Options = &sessions.Options{
        Path: "/",
    }
    sess.Values["username"] = login
    return sess
}

func loginRequired(next echo.HandlerFunc) echo.HandlerFunc {
    return func(c echo.Context) error {
        if login := getLoginFromSession(c); login == "" {
            return c.Redirect(http.StatusFound, "/login")
        }
        return next(c)
    }
}

func getLoginFromSession(c echo.Context) string {
    sess, _ := session.Get("session", c) // ТУТ
    login, exists := sess.Values["username"]
    if !exists {
        return ""
    }
    return login.(string)
}

Сам компилятор говорит что нужно обновить библиотеку github.com/labstack/echo на github.com/labstack/echo/v4, но в данном случае всё ломается.

Текст ошибки

backend\backend.go:55:8: cannot use session.Middleware(sessions.NewCookieStore([]byte("secret"))) (value of type "github.com/labstack/echo/v4".MiddlewareFunc) as type "github.com/labstack/echo".MiddlewareFunc in argument to e.Use
backend\login.go:42:36: cannot use c (variable of type "github.com/labstack/echo".Context) as type "github.com/labstack/echo/v4".Context in argument to session.Get:
        "github.com/labstack/echo".Context does not implement "github.com/labstack/echo/v4".Context (wrong type for Echo method)
                have Echo() *"github.com/labstack/echo".Echo
                want Echo() *"github.com/labstack/echo/v4".Echo
backend\login.go:61:36: cannot use c (variable of type "github.com/labstack/echo".Context) as type "github.com/labstack/echo/v4".Context in argument to session.Get:
        "github.com/labstack/echo".Context does not implement "github.com/labstack/echo/v4".Context (wrong type for Echo method)
                have Echo() *"github.com/labstack/echo".Echo
                want Echo() *"github.com/labstack/echo/v4".Echo

Ответы

▲ 1Принят

Вам нужно использовать более старую версию github.com/labstack/echo-contrib.

Последняя версия github.com/labstack/echo-contrib, которая использует github.com/labstack/echo (не /v4), это 0.5.2 (важно! без лидирующей буквы v)

исправил в go.mod

github.com/labstack/echo-contrib 0.5.2
$ go mod tidy 

получил

github.com/labstack/echo-contrib v0.0.0-20180222075343-7d9d9632a4aa
$ go build

ok-ob