如何将额外的参数传递给Echo Mux处理程序?

问题描述

如何将一些额外的变量传递给Echo Mux处理程序?

我已经在main.go中注册了这样的路线:

 e.GET("/search/:query",handlers.Search(*kindex,app.infoLog))

您可能会看到,这不是处理程序的正确签名。它应该已经传递而没有任何参数。即handlers.Search

如何从搜索处理程序访问kindex和infoLog?

func Search(c echo.Context,kindex string,infoLog *log.Logger) error {
  # Should I access a global variable from here?
  infoLog.Printf("Kendra Index: %v\n",kindex)
  # cut..
}

解决方法

您可以创建给定类型的匿名函数(闭包)并将其传递给Echo:

    handler := func(c echo.Context) error {
      return Search(c,*kindex,infoLog)
    }
    e.GET("/search/:query",handler)