Go中的Context是什么?

在 Go 编程语言(通常称为 Golang)中,术语 "上下文 "指的是上下文包及其定义的上下文类型。上下文包用于跨 API 边界和进程间传输截止日期、取消信号和其他请求范围值。

上下文包的主要目的是管理并发或分布式系统中操作的生命周期。

  • 它提供了一种跨 API 边界和跨进程传播截止日期、取消信号和其他请求范围值的方法。

这在处理 HTTP 请求等场景中尤为有用,因为在这些场景中,您可能需要传递与请求相关的信息,如处理截止日期、取消信号和其他特定于请求的值。Context允许携带取消信号等。

其他语言生态系统如Java使用threadlocal暂时存储数据,在多线程之间传播共享数据,Go 更喜欢保持此类数据管理的明确性和显式表达,专门用一个 Context包来表达,而不是含糊的thread的local,线程本地范围有多大?都非常含糊,说明Java语言设计没有上下文 边界感。

Context包定义了Context类型,它是一个接口,包含用于获取截止日期和取消信号等信息的方法,以及用于创建带有附加值或截止日期的派生上下文的方法。

上下文包的一些常见用例包括:

  • 超时和截止日期:为操作设置超时或截止时间,确保操作时间不超过指定期限。
  • 取消在满足特定条件时取消一项操作或一系列操作。
  • 请求范围值:在请求链中的函数之间传递值,如身份验证令牌或用户信息。

这里一个案例:

package main

import (
"context" "fmt" "time")

func main() { // 创建时限为 2 秒的context ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel() // 完成后必须调用取消来释放资源 // 将上下文传递给函数 doSomething(ctx)
}

func doSomething(ctx context.Context) { // 检查上下文是否已取消或已超过截止日期 select {
case <-time.After(3 * time.Second):
fmt.Println("Operation completed")
case <-ctx.Done():
fmt.Println("Operation cancelled or deadline exceeded:", ctx.Err())
}
}

在本例中,context.WithTimeout 函数用于创建一个截止时间为 2 秒的上下文。doSomething 函数会检查操作是否在指定的截止时间内完成,如果没有,它就会对上下文提供的取消信号做出反应。

https://www.jdon.com/71150.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值