Golang:浅析Context包

概述

在golang官方文档context package - context - Go Packages中是这样介绍context包的:

在context包中定义了context类型来在不同的Goroutine 之间传递上下文,携带截止时间、取消信号以及携带上下文的系统参数(k-v)的类型。对服务器的传入请求应该创建上下文,对服务器的传出调用应该接受上下文。它们之间的函数调用链必须传播上下文,可以选择将其替换为使用WithCancel、WithDeadline、WithTimeout或WithValue创建的派生上下文。当一个Context被取消时,所有从它派生的Context也会被取消。WithCancel、WithDeadline和WithTimeout函数使用。

Context 应该是第一个参数,通常命名为 ctx:

func DoSomething(ctx context.Context, arg Arg) error {
	// ... use ctx ...
}

即使函数允许,也不要传递nil上下文。通过上下文。如果您不确定要使用哪个上下文,则TODO。仅将上下文值用于传输进程和api的请求作用域数据,不能用于向函数传递可选参数。同一个Context可以被传递给运行在不同例程中的函数;上下文对于多个例程同时使用是安全的。 

Context诞生的原因

其实在 Context包诞生之前,也有一种叫做 "context" 的机制,只不过它是私有的,只能在 Go 标准库内部使用。而在 Go 1.7 中,标准库将 context 机制公开了出来,使得开发者可以在自己的代码中使用它。 引入 context 的主要原因是为了解决在并发编程中的一些问题,比如在一个请求处理过程中,可能会启动多个 goroutine 来处理不同的任务,这些任务可能需要共享一些上下文信息,比如请求的截止时间、请求的 ID 等等。如果没有一个统一的机制来管理这些上下文信息,那么代码就会变得非常混乱,难以维护。 通过引入 context,开发者可以将这些上下文信息封装在一个 context 对象中,并将其传递给各个 goroutine,从而实现了上下文信息的统一管理。这样一来,代码就变得更加清晰、易于理解和维护了。

在Context诞生之前是怎么做的?

多个

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LCS-312

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值