0

我正在使用echo在 go 中构建 Web 服务器。除了使用 context.Set 方法之外,在中间件和处理程序中传递对象的最佳方法是什么?

例如,让我们考虑以下情况:

func mw(next echo.HandlerFunc) echo.HandlerFunc {
  return func(c echo.Conext) error {
    var value TypeX = // load value of type TypeX based on query parameters
    c.Set("key", value)
    return next(c)
  }
}

func h1(c echo.context) error {
  value := c.Get("key").(TypeX)
  return c.JSON(http.StatusOk, value.H1())
}

func h2(c echo.context) error {
  value := c.Get("key").(TypeX)
  return c.JSON(http.StatusOk, value.H2())
}

func registerRoute(e *echo.Echo) {
  e.Get("/test", h)
}

有没有办法摆脱 get/set 方法?执行此操作似乎是一种不干净的方式。我愿意完成重构,创建新的结构/接口来实现这一点。

再举这个例子,假设我的 api 可以分为 bucket1、bucket2、bucket3。Value会调用方法b1, b2b3基于它落入哪个桶。这些桶可以通过将它们添加为中间件mwB1,来识别mwB2mwB3每个中间件都调用各自的方法。因此,我所有的 api 都会首先调用中间件mw;然后是 , 之一,mwB1最后是实际的处理程序,例如, 。我不想到处加载,get/set 对我来说似乎不干净(除非这是执行此操作的标准方式)。mwB2mwB3e.Get("/test", h, mw, mwB2)value

4

0 回答 0