golang заменяет fasthttp на gin с ошибкой времени выполнения границ среза вне диапазона

загляните на https-сервер и посмотрите, можно ли перейти с fasthttp на gin, но застрять и получить ошибку времени выполнения во время маршрутизации из промежуточного программного обеспечения. Я стараюсь, чтобы код был похож друг на друга, если это возможно.

      func main() {
    ...
    route.InitRouters()
    /*
    s := &fasthttp.Server{Handler: middleware.Handler} // fasthttp
    s.ListenAndServe(":8081")
    */
    router := gin.New()                                // gin
    router.Use(middleware.Handler)
    router.Run("localhost:8180")
    ...
}

      var router1 *gin.Engine            // fasthttp: *fasthttprouter.Router
var router2 *gin.Engine
func InitRouters() {
    router1 = gin.New()            // fasthttp: fasthttprouter.New()
    ...
    router2 = gin.New()
    ...
}
func GetRouter1() *gin.Engine { // fasthttp: *fasthttprouter.Router
    return router1              // runtime error
}
func GetRouter2() *gin.Engine {
    return router2              // runtime error
}
...

middleware.go

      ...
func Handler(ctx *gin.Context) {   // fasthttp: ctx *fasthttp.RequestCtx
    if ... {
        route.GetRouter1().HandleContext(cts) // fasthttp: route.GetRouter1().Handler(ctx)
    } else {
        route.GetRouter2().HandleContext(ctx)
    }
}

Ошибка выполнения произошла в route.goв return router1или же return router2.

      runtime error: slice bounds out of range [:1] with capacity 0
...
go/pkg/mod/github.com/gin-gonic/gin@v1.7.4/context.go:165 (0xc4eaca)
        (*Context).Next: c.handlers[c.index](c)
go/pkg/mod/github.com/gin-gonic/gin@v1.7.4/recovery.go:99 (0xc62bcc)
        CustomRecoveryWithWriter.func1: c.Next()
go/pkg/mod/github.com/gin-gonic/gin@v1.7.4/context.go:165 (0xc4eaca)
        (*Context).Next: c.handlers[c.index](c)
go/pkg/mod/github.com/gin-gonic/gin@v1.7.4/gin.go:525 (0xc59777)
        serveError: c.Next()
...

я подозреваю routerв main.goне может маршрутизировать ctxк router1или же router2с помощью . Мне нужно использовать &http.Serverвместо &fasthttp.Serverс ServeHttp middlewareобработчик? Как это обычно делается по-джински?

1 ответ

Используйте один движок с группами:

       router = gin.New()           
 group1:=router.Group("/path1")
 group2:=router.Group("/path2")

Затем настройте обе группы по отдельности.

Другие вопросы по тегам