导航

golang echo group 用法的微妙注意点

Posted on 2022-11-10 19:35  Morya  阅读(165)  评论(0编辑  收藏  举报

用不好的话,可能会引发很诡异的问题。

package main

import (
	"net/http"

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

func injectFail(n echo.HandlerFunc) echo.HandlerFunc {
	return func(c echo.Context) error {
		return echo.NewHTTPError(http.StatusBadRequest, "failed")
	}
}

func main() {
	logrus.SetFormatter(&logrus.TextFormatter{DisableQuote: true})

	var e = echo.New()
	e.Use(middleware.Logger(), middleware.Recover())

	api := e.Group("/api")

	api.Group("", injectFail)
	api.GET("/user", func(c echo.Context) error {
		return c.String(http.StatusOK, "ok")
	})

	if err := e.Start(":9394"); err != nil {
		logrus.WithError(err).Error("fail")
	}
	logrus.Infof("bye")
}

按照上文代码,一般理解 curl 127.0.0.1:9394/api/user 会得到 "ok" 反馈。

但是,最特殊的点在于,127.0.0.1:9394/api/user2 会得到什么?
答案就是,会得到 "failed"