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

echo.Context的Set()方法是否会将值保存到底层context.Context中?

结论

你提到的方案不可行,echo.Context.Set() 不会将值写入底层的context.Context中。

原因说明

Echo的上下文独立维护了一个内置的map结构存储Set()方法传入的KV数据,和Go标准库context.Context的存储是完全隔离的两套实现。你直接调用Set()之后再提取底层context.Context,里面不会包含你设置的自定义值。

正确实现方案

如果你需要将自定义值写入标准context.Context向下游传递,可以按照以下步骤操作:

  • 首先从echo.Context中获取原生的请求上下文:baseCtx := c.Request().Context()
  • 使用标准库方法将自定义值写入上下文:newCtx := context.WithValue(baseCtx, yourKey, yourValue)

    注意:为了避免不同包之间的key命名冲突,不要直接用字符串作为context的key,建议定义包内私有的自定义类型作为key类型,示例:

    type ctxKey string
    const UserIDKey ctxKey = "user_id"
    
  • 如果你不需要将更新后的上下文同步回当前请求的Echo上下文,直接将newCtx传递给下游业务方法即可;如果你需要让后续的Echo中间件、Handler也能拿到更新后的上下文,可以调用以下方法回写:
    c.SetRequest(c.Request().WithContext(newCtx))
    

内容的提问来源于stack exchange,提问作者vahdet

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 01:57:04