Go Echo框架如何传递Context及数据到其他包的处理函数
实现方案
Echo 路由注册要求处理函数必须符合func(c echo.Context) error的签名规范,无法直接注册带额外参数的处理函数,通过闭包做依赖注入即可实现需求,操作步骤如下:
- 先调整control包内
Test函数的定义,匹配要求的入参形式,同时保留Echo处理函数要求的error返回值
package control import ( "github.com/labstack/echo/v4" "net/http" ) // 按要求定义函数签名,入参为echo.Context和目标data变量,返回error func Test(c echo.Context, data map[string]interface{}) error { // 函数内部可直接使用传入的data做业务逻辑 return c.JSON(http.StatusOK, data) }
- 修改main包的路由注册逻辑,用闭包包裹
Test调用,把main中定义的data变量捕获后传入
func main() { // 你定义的data变量,可提前初始化赋值 var data map[string]interface{} data = make(map[string]interface{}) data["demo_key"] = "demo_value" // 示例初始化内容 echo.NotFoundHandler = func(c echo.Context) error { var dataResponse st.DataResponse dataResponse = st.Response{ Response: st.ResponseNil{ ErrorCode: "ER-900", ResponseCode: "099", ResponseDesc: "Method Not Found", }, } return c.JSONPretty(http.StatusNotFound, dataResponse, " ") } e := echo.New() // 替换原有的直接注册control.Test的写法,用闭包注入data e.POST("/TestPost", func(c echo.Context) error { return control.Test(c, data) }) fmt.Println("starting API") e.Start(":1234") }
注意:如果服务运行期间存在多请求并发读写
data的场景,需要搭配sync.RWMutex做并发访问控制,避免触发并发读写panic。
内容的提问来源于stack exchange,提问作者Apais
相关产品推荐
相关产品推荐

