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

相关推荐

  1. GoContext什么

    2023-12-25 14:38:02       61 阅读
  2. gocontext使用场景

    2023-12-25 14:38:02       51 阅读
  3. GO语言Context作用

    2023-12-25 14:38:02       43 阅读
  4. Go语言context原理及使用

    2023-12-25 14:38:02       32 阅读
  5. GO——context

    2023-12-25 14:38:02       59 阅读
  6. GoContext

    2023-12-25 14:38:02       38 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-25 14:38:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-25 14:38:02       106 阅读
  3. 在Django里面运行非项目文件

    2023-12-25 14:38:02       87 阅读
  4. Python语言-面向对象

    2023-12-25 14:38:02       96 阅读

热门阅读

  1. centos7安装python3 pysnmp

    2023-12-25 14:38:02       53 阅读
  2. 关于分布式框架和微服务的介绍

    2023-12-25 14:38:02       59 阅读
  3. dangerouslyUseHTMLString选项来启用自定义 HTML 片段

    2023-12-25 14:38:02       64 阅读
  4. 【AI】人工智能复兴的推进器之自然语言处理

    2023-12-25 14:38:02       61 阅读
  5. CentOS+ISCSI

    2023-12-25 14:38:02       57 阅读
  6. 学习Vue2.x

    2023-12-25 14:38:02       62 阅读
  7. 开发web应用,用前端技术还是.NET?

    2023-12-25 14:38:02       59 阅读