golang中context包中的一些基础知识的归纳

    科技2022-08-13  91

    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/

    仅仅只是自己的学习理解。

    Processed: 0.022, SQL: 8