GoLang context包
初始化一个context如果确定是开头则用Background,如果不确定则用ToDo
context包核心API有四个
1.context.WithValue 设置键值对,并且返回一个新的context实例
2.context.WithCancel
3.context.WithDeadline
4.context.WithTimeout 三者都返回一个可取消的context实例和取消函数,WithTimeout实际上就是调用了WithDeadline。
Context 接口核心 API 有四个
Deadline :返回过期时间,如果 ok 为 false,说明没有设置过期时间。略常用
Done:返回一个 channel,一般用于监听 Context 实例的信号,比如说过期,或者正常关闭。常用
Err:返回一个错误用于表达 Context 发生了什么。Canceled => 正常关闭,DeadlineExceeded => 过期超时。比较常用
Value:取值
context包主要用于安全传递数据和控制链路
安全传递数据:指在请求执行上下文中线程安全的传递数据,依赖于WithValue方法
父与子关系
当父亲取消或超时时所有派生的子context都被取消或者超时
当找key时,子context从自己向父亲查找
即,控制是从上至下的,查找是从下至上的,父无法访问子内容,子取消和超时与父没有关系
控制
context包提供了三个控制方法,WithCancel,WithDeadline和WithTimeout
没有过期时间手动取消,使用WithCancel
在固定时间点取消,使用WithDeadline
在一段时间后过期,使用WithTimeout
注意事项
一般只用做方法参数,而且作为第一个参数
不要用作结构体字段
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!