context.Context是Golang标准库提供的接口(context包对此接口有多种实现),该接口提供了四个抽象法:

成都创新互联公司专注网站设计,以设计驱动企业价值的持续增长,网站,看似简单却每一个企业都需要——设计,看似简洁却是每一位设计师的心血 10年来,我们只专注做网站。认真对待每一个客户,我们不用口头的语言来吹擂我们的优秀,超过千家的成功案例见证着我们的成长。
type Context interface {
Deadline() (deadline time.Time, ok bool)
Done() <-chan struct{}
Err() error
Value(key any) any
}
context包提供了两个方法:
func Background() Context{}
func TODO() Context {}
目前context.Background和context.TODO方法没有太大差别,返回的都是空Context,只是在使用场景和语义上稍有不同。其他的Context都需要基于构造好的Context衍生出来,一个Context可以衍生多个子Context。
context包提供如下四个以With开头的衍生Context的方法:
func WithCancel(parent Context) (ctx Context, cancel CancelFunc)
func WithDeadline(parent Context, d time.Time) (Context, CancelFunc)
func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc)
func WithValue(parent Context, key, val any) Context
前三种方法的相同点都是基于parent Context生成一个新的Context并返回一个CancelFunc方法,CancelFunc调用后,当前Context和基于新Context的子Context都会被取消。不同点在于WithCancel方法返回的CancelFunc需要手动调用;WithDeadline方法可以设置一个时间点,到这个时间点后会自动调用CancelFunc,当然也可以手动调用;WithTimeout方法可以设置时长,超过指定时长后会自动调用CancelFunc,当然也可以手动调用。
WithValue方法可以生成一个绑定指定的键值对数据的Context,可以通过context.Value(Key) 获取指定key的值。