1.Background() 使用方法:context.Background() 返回结果:当前context的父代context
2.TODO() 使用方法:context.TODO() 返回结果:当前context所包含的context
上面两点需要说明的是所有的context加起来就像一颗树一样 parent / | \ / | \ son son son /|\ /|\ /|\ ... ... ... ... ... ... ...
3.context的接口 即context.Context{}的定义为 type Context interface { Deadline() (deadline time.Time, ok bool) //返回当前context取消的时间,和是否被取消了 Done() <-chan struct{} //Done方法需要返回一个Channel,这个Channel会在当前工作完成或者上下文被取消之后关闭。多次调用的通道唯一 Err() error //返回关闭的原因 Value(key interface{}) interface{} //返回当前context中键对应的值 }
4.WithChannel函数 函数签名:func WithCancel(parent Context) (ctx Context, cancel CancelFunc) WithCancel返回带有新Done通道的父节点的副本。当调用返回的cancel函数或当关闭父上下文的Done通道时,将关闭返回上下文的Done通道,无论先发生什么情况
5.WithDeadline函数 函数签名:func WithDeadline(parent Context, deadline time.Time) (Context, CancelFunc) 返回父上下文的副本,并将deadline调整为不迟于d。如果父上下文的deadline已经早于d,则WithDeadline(parent, d)在语义上等同于父上下文。 当截止日过期时,当调用返回的cancel函数时,或者当父上下文的Done通道关闭时,返回上下文的Done通道将被关闭,以最先发生的情况为准。
6.WithTimeout函数 函数签名:func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc) WithTimeout返回WithDeadline(parent, time.Now().Add(timeout))和cancel函数
7.WithValue函数 函数签名:func WithValue(parent Context, key, val interface{}) Context WithValue函数能够将请求作用域的数据与 Context 对象建立关系。WithValue返回父节点的副本,其中与key关联的值为val。
学习内容来自:https://www.liwenzhou.com/posts/Go/go_context/
仅仅只是自己的学习理解。