Golang源码研究:2. context 上下文

文章内容

context 是啥?

context 中文叫做上下文,是 goroutine 的上下文。主要用于在不同的goroutine中传递上下文。
主要应用于 取消信号、超时时间、截止时间、k-v传递。并且是并发安全的。

context 有什么用

  1. 超时管理,上游因为种种原因提前关闭了链接、或者超过了请求方要求的时间,就需要快速退出掉这条链路上的所有的goroutine。
  2. k-v 传递,在多个不同的goroutine中,常常需要传递各种的信息,就可以通过context包含的k-v键值对去做共享数据。
  3. 取消信号等...
    context用来解决goroutine之间退出通知、元数据传递问题

context 的设计

plain text
context.Background()        │        ▼     cancelCtx       /    \      ▼      ▼  valueCtx  timerCtx      │      ▼  cancelCtx

context.Background() 是一个空的 context,他不能被取消、没有值,也没有超时时间,所有的context都将会挂在这个context下面。
go 提供了四个创建子节点context的函数

go
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

觉得不错?给作者点个赞吧

分类:Golang 源码研究

评论 (0)

无需注册,留言经站长审核后公开。

加载评论中…

Golang源码研究:2. context 上下文 · Ensan 的博客