golang context介绍

在 Go 语言中,context 是一个用于在 goroutines 之间传递上下文信息的包。它主要用于控制请求的生命周期和管理跨 API 边界的信号传递。以下是 context 的一些关键特性和用途:

1. 主要用途

  • 取消信号:允许在多个 goroutines 中发出取消信号,以便提前终止操作。
  • 超时控制:可以设置超时时间,使得操作在超时后自动取消。
  • 传递请求范围值:可以在上下文中传递请求范围的值,例如身份验证信息或请求ID。

2. 主要类型

  • Contextcontext.Context 是一个接口,定义了方法来获取值、检查是否被取消以及获取截止时间。
  • 背景上下文
    • context.Background():返回一个空的上下文,通常在主函数、初始化和测试中使用。
    • context.TODO():用于尚未确定上下文的场合,表示未来可能需要使用上下文。

3. 创建上下文

  • WithCancel:创建一个可以取消的上下文。
  • WithTimeout:创建一个具有超时的上下文。
  • WithDeadline:创建一个在特定时间点自动取消的上下文。
  • WithValue:创建一个可以存储键值对的上下文。

4. 示例

以下是一个简单的示例,展示如何使用 context

go 复制代码
package main

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

func main() {
    // 创建一个带有取消功能的上下文
    ctx, cancel := context.WithCancel(context.Background())
    defer cancel() // 确保在函数结束时取消上下文

    go func() {
        time.Sleep(2 * time.Second)
        cancel() // 2秒后取消上下文
    }()

    // 等待上下文被取消
    <-ctx.Done()
    fmt.Println("Context cancelled:", ctx.Err())
}

5. 注意事项

  • context 是不可变的:一旦创建,就不能修改。
  • 应避免将 context 作为普通参数传递,应该作为第一个参数。
  • 不应将 context 存储在结构体中或长时间保存。

总结

context 是 Go 中用于管理 goroutines 生命周期和信号传递的重要工具。它使得在并发编程中处理请求的取消、超时和传递值变得更加简单和安全。

相关推荐
子兮曰2 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰2 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
小羊没烦恼!2 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
爱勇宝2 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
胡写代码2 天前
别再前后端各写一套表单校验了
java·后端
伞伞悦读2 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
ttwuai2 天前
Go开源后台管理系统推荐:怎么按技术栈和边界比较4个官方仓库?
golang·gin
大勇前进2 天前
原生 PHP 还是 Laravel?小项目到底要不要上框架
后端
yuzhi_liu2 天前
我用 LangGraph4j 实现 Multi-Agent Supervisor
后端
alsmile2 天前
Node-RED 之外,国产规则引擎的新方案:基于标准语法,Go 先行实现
后端·开源·go