初始化一个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
注意事项
一般只用做方法参数,而且作为第一个参数
不要用作结构体字段
标签:WithTimeout,过期,GoLang,WithDeadline,取消,context,超时 From: https://www.cnblogs.com/mengqi-go/p/17746576.html