Go 的 context 到底该怎么传,三个常见误用

举报
yd_286814013 发表于 2026/11/08 08:09:58 2026/11/08
【摘要】 context 不是万能的取消开关,用错会让超时链路断掉。一、把 context 存进 structcontext 应当作为函数第一个参数显式传递,塞进结构体字段会导致生命周期失控,调用方无法取消。二、用 context.Background() 新建而没有父级下游拿不到上游的 deadline,上游超时了下游还在跑。正确做法是从入参 ctx 派生 context.WithTimeout。三...

context 不是万能的取消开关,用错会让超时链路断掉。

一、把 context 存进 struct

context 应当作为函数第一个参数显式传递,塞进结构体字段会导致生命周期失控,调用方无法取消。

二、用 context.Background() 新建而没有父级

下游拿不到上游的 deadline,上游超时了下游还在跑。正确做法是从入参 ctx 派生 context.WithTimeout。

三、忘记 defer cancel()

会泄漏 timer,高并发下 goroutine 和内存持续增长。每次 WithCancel/WithTimeout 后立刻 defer 掉。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。