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

注意事项

一般只用做方法参数,而且作为第一个参数

不要用作结构体字段

posted @   柒染丨  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示