You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 14:21:13