GoLang context包

发布时间 2023-10-07 16:19:23作者: 柒染丨

初始化一个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

注意事项

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

不要用作结构体字段