Golang中context包基础知识详解

这篇具有很好参考价值的文章主要介绍了Golang中context包基础知识详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

什么是context.Context?

如何构造context.Context对象?

衍生Context方法

使用context包需要注意的点


什么是context.Context?

context.Context是Golang标准库提供的接口(context包对此接口有多种实现),该接口提供了四个抽象法:

type Context interface {
  Deadline() (deadline time.Time, ok bool)
  Done() <-chan struct{}
  Err() error
  Value(key any) any
}
  • Deadline方法,返回context.Context被取消的时间点,也就是需要完成任务的截止时间,连续调用返回相同的结果。
  • Done方法, 当前context被取消后,返回的channel就会被close。如果当前context不会被取消则返回nil,连续调用返回相同的结果。
  • Err方法,返回context.Context结束的错误
    • 如果Done方法返回的channel没有关闭,返回nil
    • 如果Done方法返回的channel被关闭了,返回一个非nil的值,连续调用返回相同的结果
      • context如果被取消了,返回 “context canceled”错误
      • 如果执行时间超过了Deadline,返回 “context deadline exceeded”错误
  • Value方法,返回Context中key对应的value值,对于同一个context,多次调用获取同一个key的值会返回相同的结果。

如何构造context.Context对象?

context包提供了两个方法:

func Background() Context{}
func TODO() Context {}
  • Background方法,返回一个空Context对象,所有Context对象的的源头都应该是这个空Context对象。
  • TODO方法,也是返回一个空Context对象,如果还不确定使用何种Context时,可以使用此方法创建的Context对象。

目前context.Background和context.TODO方法没有太大差别,返回的都是空Context,只是在使用场景和语义上稍有不同。其他的Context都需要基于构造好的Context衍生出来,一个Context可以衍生多个子Context。

衍生Context方法

context包提供如下四个以With开头的衍生Context的方法:

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

前三种方法的相同点都是基于parent Context生成一个新的Context并返回一个CancelFunc方法,CancelFunc调用后,当前Context和基于新Context的子Context都会被取消。不同点在于WithCancel方法返回的CancelFunc需要手动调用;WithDeadline方法可以设置一个时间点,到这个时间点后会自动调用CancelFunc,当然也可以手动调用;WithTimeout方法可以设置时长,超过指定时长后会自动调用CancelFunc,当然也可以手动调用。

WithValue方法可以生成一个绑定指定的键值对数据的Context,可以通过context.Value(Key) 获取指定key的值。文章来源地址https://www.toymoban.com/news/detail-432175.html

使用context包需要注意的点

  • 需要Context参数的方法,把Context作为第一个参数(千万不要把Context放在结构体中,然后将结构体作为参数传递)。
  • 使用context.Background方法构造的Context对象应该作为根Context, 用于衍生其他Context。
  • 方法需要传入的Context类型不确定的时候,传入使用context.TODO构造的Context (千万不要传入nil)。
  • 不要滥用context.WithValue传递数据,只用来传递必须的数据。
  • Context是并发安全的,同一个Context可以传递给多个goroutine,可被多个goroutine同时访问。

到了这里,关于Golang中context包基础知识详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • c#多线程—基础概念到“双色球”项目实现(附知识点目录、代码、视频)

    总结:视频中对于多线程讲的非常透彻,从线程基础概念—.net不同版本出现的线程方法—多线程常出现问题—双色球项目实践,每个知识点都有代码实操,受益匪浅。附上学习笔记和实操代码。 视频 线程:程序执行的最小单位,任何操作都是由线程完成的,使用同步时,资

    2024年02月11日
    浏览(39)
  • 【基础知识】什么是哈希冲突?

    哈希表(Hash Table)是一种数据结构,它可以快速地在大量数据中查找、插入和删除时数据。哈希表通过使用哈希函数将键(Key)映射到一个位置,然后在该位置存储或查找数据。 哈希函数的作用是,将键转换为一个整数,这个整数通常称为哈希值(Hash Value)。哈希表的范围通

    2024年02月06日
    浏览(25)
  • 什么是网关?网关基础知识介绍

    网关的英文名称:gateway,又叫做网间连接器、协议转换器。网关是在采用不同体系结构或协议的网络之间进行互通时,用于提供协议转换、路由选择、数据交换等网络兼容功能的设施。 网关在传输层上以实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的

    2024年02月08日
    浏览(33)
  • URL是什么意思?基础知识普及

    URL(Uniform Resource Locator)统一资源定位器,是计算机Web网络相关的术语,就是网页地址的意思。我们的互联网世界就是由很多的URL组成,也可以说就是已URL来表现的。统一资源定位系统(uniform resource locator;URL)是因特网的万维网服务程序上用于指定信息位置的表示方法。它最

    2024年02月04日
    浏览(35)
  • 什么是DNS?DNS基础知识介绍

    DNS是Domain Name System的简写,即域名系统,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。 上面的解释很多普通的用户可能无法理解,这里我们来简单的分析一下,让大家知道DNS是用来干什

    2024年02月08日
    浏览(32)
  • 什么是端口映射?端口映射基础知识介绍

    端口映射又叫做端口转发、虚拟服务器,不同的宽带路由器的命名有所不同。内网的一台电脑要上因特网对外开放服务或接收数据,都需要端口映射。 端口映射分为动态和静态。动态端口映射:内网中的一台电脑要访问网站,会向NAT网关发送数据包,包头中包括对方网站IP、

    2024年02月08日
    浏览(35)
  • ARP是什么?ARP基础知识介绍

    ARP是英文Address Resolution Protocol的简称,中文名叫做:地址解析协议,是一个位于TCP/IP协议栈中的底层协议,对应于数据链路层,负责将某个IP地址解析成对应的MAC地址。 ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的进行。从IP地址到物理

    2024年02月08日
    浏览(26)
  • DHCP是什么意思?DHCP基础知识介绍

    前言: 本文主要是为没有IT技术支持的用户服务的,同时结合家用路由器来进行介绍的,主要目的是为了让普通用户在学习本文后,在配置路由器上网的时候对DHCP服务器不在陌生,并知道如何正确的来使用DHCP服务。如果你是IT专业人士,本文的内容并不适合你,请寻找专业的

    2024年02月08日
    浏览(30)
  • WDS是什么意思?WDS基础知识介绍

    WDS是英文Wireless Distribution System的简称,中文名称是:无线分布式系统,主要作用是实现无线基站之间的通信。在家庭无线网络的应用中,WDS实现了无线网络覆盖范围的延伸,使得无线信号的覆盖范围更加的广泛,可以让我们更加方便的使用无线网络。 WDS应用 1、家庭面积较大

    2024年02月08日
    浏览(29)
  • Unity | Shader基础知识(什么是shader)

    Shader的中文名叫着色器。 着色器的作用: 这个世界是3D的,包括在Unity的场景中,我们建的球球,方块块之类的,都是3D的,但是,屏幕是2D的,把3D的东西,通过颜色的汇总,显示在2D的屏幕上。 想知道颜色是怎么合到一起的,我们就找个图片,把它拆开看。 因为世界上所有

    2024年02月15日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包