我正在使用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
, b2
,b3
基于它落入哪个桶。这些桶可以通过将它们添加为中间件mwB1
,来识别mwB2
,mwB3
每个中间件都调用各自的方法。因此,我所有的 api 都会首先调用中间件mw
;然后是 , 之一,mwB1
最后是实际的处理程序,例如, 。我不想到处加载,get/set 对我来说似乎不干净(除非这是执行此操作的标准方式)。mwB2
mwB3
e.Get("/test", h, mw, mwB2)
value