context详解

官方文档:https://pkg.go.dev/context

context携带跨 API 边界和进程之间的截止日期、取消信号和其他请求范围的值。

函数调用链传Context,可以选择将其替换为使用 WithCancelWithDeadlineWithTimeoutWithValue 创建的派生 Context。当一个 Context 被取消时,从它派生的所有 Context 也会被取消。

WithCancel、WithDeadline 和 WithTimeout 函数采用 Context(父级)并返回派生的 Context(子级)和 CancelFunc。调用 CancelFunc 会取消子级及其子级,删除父级对子级的引用,并停止任何关联的计时器。未能调用 CancelFunc 会泄漏子级及其子级,直到父级被取消或计时器触发。

WithCancelCause 函数返回一个 CancelCauseFunc,它接受一个错误并将其记录为取消原因。在已取消的上下文或其任何子上下文上调用 Cause 可检索原因。如果未指定原因,Cause(ctx) 返回与 ctx.Err() 相同的值。

使用上下文的程序应遵循以下规则

  • 不要将上下文存储在结构类型中;相反,将 Context 显式传递给每个需要它的函数。 Context 应该是第一个参数,通常命名为 ctx:
func DoSomething(ctx context.Context, arg Arg) error {
	// ... use ctx ...
}
  • 即使函数允许,也不要传递 nil Context。如果您不确定要使用哪个 Context,请传递 context.TODO
  • 仅将context值用于传输进程和 API 的请求范围数据,而不是用于将可选参数传递给函数。
  • 相同的 Context 可以传递给在不同 goroutine 中运行的函数;上下文对于多个 goroutine 同时使用是安全的。
  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值