美文网首页
Golang的context详解

Golang的context详解

作者: 我爱张智容 | 来源:发表于2023-01-14 20:01 被阅读0次

    context 主要用来在 goroutine 之间传递上下文信息,包括:取消信号、超时时间、截止时间、k-v 等。

    一句话:context 用来解决 goroutine 之间退出通知、元数据传递的功能。

    context常用的使用姿势:
    1、并发控制: web编程中,一个请求对应多个goroutine之间的数据交互
    2、超时控制 : mongo-driver中很多方法第一个参数就是context ,需要设置context的timeout
    3.上下文控制 :

    context 底层实现原理

    整体概览
    context 包的代码并不长,context.go 文件总共不到 500 行,其中还有很多大段的注释,代码可能也就 200 行左右的样子,是一个非常值得研究的代码库。

    image.png image.png image.png

    [中间大篇幅讲解源码 请看知乎:] https://zhuanlan.zhihu.com/p/68792989

    总结
    到这里,整个 context 包的内容就全部讲完了。源码非常短,很适合学习,一定要去读一下。

    context 包是 Go 1.7 引入的标准库,主要用于在 goroutine 之间传递取消信号、超时时间、截止时间以及一些共享的值等。它并不是太完美,但几乎成了并发控制和超时控制的标准做法。

    使用上,先创建一个根节点的 context,之后根据库提供的四个函数创建相应功能的子节点 context。由于它是并发安全的,所以可以放心地传递。

    当使用 context 作为函数参数时,直接把它放在第一个参数的位置,并且命名为 ctx。另外,不要把 context 嵌套在自定义的类型里。

    最后,大家下次在看到代码里有用到 context 的,观察下是怎么使用的,肯定逃不出我们讲的几种类型。熟悉之后会发现:context 可能并不完美,但它确实简洁高效地解决了问题。

    相关文章

      网友评论

          本文标题:Golang的context详解

          本文链接:https://www.haomeiwen.com/subject/jrjgsltx.html