介绍一下 Go 的 context

本文阅读 3 分钟
首页 golang 正文
题目来源:知乎

答案:自由

Context 就像糖葫芦中的竹签子 :-)
它的作用是在上下文中传递除了业务参数之外的额外信息,这个额外信息是为了全局而考虑使用的,例如在微服务业务中,我们需要整个业务链条整体的超时时间信息。不过 go 标准库中的 Context 还提供了超时 Timeout 和 Cancel 机制。总的来说,在下面这些场景中,可以考虑使用 Context:

  • 上下文信息传递
  • 控制子 goroutine 的运行
  • 超时控制的方法调用
  • 可以取消的方法调用
    Context 是一个可以帮助我们实现多 goroutine 协作流程的同步工具。我们还可以通过 Context 传达撤销信号与传递数据。Context 的实际值大体上分为三种:根 Context 值、可撤销的 Context 值和含数据的 Context 值。所有的 Context 值共同构成了一颗上下文树,这棵树的作用域是全局的,而根 Context 值就是这棵树的根,它是全局唯一的,并且不提供任何额外的功能。可撤销的 Context 值还可以分为:只可手动撤销的 Context 值,和可以定时撤销的 Context 值。可以通过生成它们时得到的撤销函数来对其进行手动的撤销。对于定时撤销的 Context 值必须在生成时就完全确定,并且不能更改,不过我们可以在过期时间达到之前,对其进行手动的撤销,一旦撤销函数被调用,撤销信号就会立即被传达给对应的 Context 值并由该值的 Done 方法返回的接收通道表达出来。“撤销”这个操作是 Context 值能够协调多个 goroutine 的关键所在。撤销信号会沿着上下文树叶子节点方向传播。含数据的 Context 可以携带数据。每个值都可以存储一对键和值。
本文来自投稿,不代表本站立场,如若转载,请注明出处:
了解中间件吗?有什么好处?
« 上一篇 09-17
Go 高并发的特点
下一篇 » 09-17

发表评论

发表评论