必须使用 func(echo.Context) error 类型,因为 Echo 路由方法强制要求 echo.HandlerFunc(即该签名),参数需为 echo.Context 以支持封装能力,返回 error 用于统一错误处理,且不兼容 http.HandlerFunc。

直接绑定 func(echo.Context) error 就行,这是 Echo 路由注册的唯一合法 Handler 类型,不是任意函数都能塞进去。
为什么必须用 func(echo.Context) error?
Echo 的 GET、POST 等方法签名强制要求参数是 echo.HandlerFunc 类型,而它的底层定义就是 func(echo.Context) error。传其他类型(比如不带 error 返回值、或参数不是 echo.Context)会编译报错:
cannot use func(http.ResponseWriter, *http.Request) (type func(http.ResponseWriter, *http.Request)) as type echo.HandlerFunc
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 返回
error是为了配合 Echo 的统一错误处理链(HTTPErrorHandler) - 参数必须是
echo.Context,不是标准库的*http.Request或http.ResponseWriter—— 它封装了请求/响应/绑定/状态码等能力 - 闭包里捕获外部变量没问题,但别在 Handler 里启动 goroutine 后直接返回,否则上下文可能已销毁
e.GET 和 e.POST 等方法怎么传 Handler?
所有 HTTP 方法注册都只接受一个或多个 echo.HandlerFunc,支持链式传入多个中间件风格的 Handler(按顺序执行):
e.GET("/users", authMiddleware, loggingMiddleware, handlerFunc)
- 第一个参数是路径字符串,支持
:id、*等动态匹配 - 第二个及之后的参数全是
echo.HandlerFunc,哪怕你只传一个,也得是这个类型 - 如果想复用逻辑,把 Handler 写成独立函数更清晰,比如
func getUser(c echo.Context) error { ... } - 不要试图用
http.HandlerFunc包一层再传——它和echo.HandlerFunc不兼容
Handler 里怎么读参数?别混用 QueryParam 和 Param
路径参数、查询参数、表单数据各自有专用方法,用错就拿不到值:
-
c.Param("id")只读/users/:id这种路由里的命名段,不是 URL 查询串 -
c.QueryParam("page")读?page=2,对 POST body 里的 JSON 或 form-data 无效 -
c.FormValue("name")仅适用于application/x-www-form-urlencoded或multipart/form-data - JSON 请求体统一走
c.Bind(&u),结构体字段要加json:tag,别指望QueryParam能解析 body
最常被忽略的是:Handler 函数签名看似简单,但一旦和中间件组合、或在并发场景下做 context.Value 传递,就容易因生命周期错位导致 panic。写完务必检查 c.Request().Context() 是否还在 active 状态,尤其在异步操作后。


















