简单认识context

简单认识context的作用:

用于在 API 调用链中携带请求范围的截止时间、取消信号、以及请求相关的元数据的机制。如果你的goroutine, 函数中,如果希望被控制, 超时、传值,但是我不希望影响我原来的接口信息的时候,函数参数中第一个参数就尽量的要加上一个ctx。

实际上context包主要实现了三个功能:

创建上下文:

context.Background(): 打算启动已知上下文的地方,通常我们都使用这个

context.TODO(): 不确定要使用哪个上下文时,可以将其用作占位符

空的上下文无用处,因为其中的Done(),Err()等方法返回的都是nil;

携带键值对:

context.WithValue():可以让 Context 实现携带键值对的功能

注意:返回的 Context 与其是派生关系

在使用的场景中,通常比如一个订单id从下单到付款,只需要在context中定义一次后续就可以直接取到。

传递取消信号:

context.WithCancel():主动取消

context.WithDeadline():设置上下文需要完成的截止时间,在到达截止时间之后回自动结束(在对应的时间取消)

context.WithTimeout():设置上下文的超时时间,在到达超时之后自动结束(超时取消)

实际上在阅读源码的过程中可以看到,withDeadLine和withTimeOut是很相似的

func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc) {
	return WithDeadline(parent, time.Now().Add(timeout))
}

WithTimeout() 是在当前时间上加了一个超时时间,然后调用 WithDeadline() 函数实现的超时取消功能。这样也有助于对WithDeadline的理解

传递取消信号,通过调用Done()返回的cannel(),来完成部分的逻辑处理.

WithCancel()方法是结束上下文最直接的方式,通过传入参数ctx,就可以直接结束上下文.

【Go】透彻理解 context.Context - 知乎 (zhihu.com)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值