当前位置: 首页 > news >正文

关于go-context包

思维导图

  • 目的
    • 为了在不同的 goroutine 之间或跨 API 边界传递超时、取消信号和其他请求范围内的值(与该请求相关的值。这些值可能包括用户身份信息、请求处理日志、跟踪信息等等)。
  • 常用场景
    • 数据操作
    • 网络请求
    • RPC操作
  • context接口
    • context 包在提供了一个用于跨 API 边界传递超时、取消信号和其他请求范围值的通用数据结构。
    • 用于在多个 Goroutine 和函数之间传递请求范围内的信息。
    • 核心方法:Deadline、Done、Err、Value
  • 分解核心方法
    • Deadline
      • Deadline() (deadline time.Time, ok bool) 方法返回 Context 的截止时间,表示在这个时间点之后,Context 会被自动取消。
      • 如果 Context 没有设置截止时间,该方法返回一个零值 time.Time 和一个布尔值 false。
    • Done
      • Done() 方法返回一个只读通道,当 Context 被取消时,该通道会被关闭。
      • 你可以通过监听这个通道来检测 Context 是否被取消。如果 Context 永不取消,则返回 nil。
    • Err
      • Err() 方法返回一个 error 值,表示 Context 被取消时产生的错误。
      • 如果 Context 尚未取消,该方法返回 nil。
    • Value
      • Value(key any) any 方法返回与 Context 关联的键值对,一般用于在 Goroutine 之间传递请求范围内的信息。
      • 如果没有关联的值,则返回 nil。
  • context创建的方式
    • context.Background()
      • 该函数返回一个非 nil 的空 Context,它没有携带任何的值,也没有取消和超时信号。通常作为根 Context 使用。
    • context.todo()
      • context.TODO() 函数返回一个非 nil 的空 Context,它没有携带任何的值,也没有取消和超时信号。
      • 不确定上下文时使用
    • context.withvalue()
      • context.WithValue(parent Context, key, val any) 函数接收一个父 Context 和一个键值对 key、val,返回一个新的子 Context,并在其中添加一个 key-value 数据对。
    • context.Witchcancle()
      • context.WithCancel(parent Context) (ctx Context, cancel CancelFunc) 函数接收一个父 Context,返回一个新的子 Context 和一个取消函数,当取消函数被调用时,子 Context 会被取消,同时会向子 Context 关联的 Done() 通道发送取消信号,届时其衍生的子孙 Context 都会被取消。
      • 这个函数适用于手动取消操作的场景。
    • context.withDeadline()
      • context.WithDeadline(parent Context, d time.Time) (Context, CancelFunc) 函数接收一个父 Context 和一个截止时间作为参数,返回一个新的子 Context。当截止时间到达时,子 Context 其衍生的子孙 Context 会被自动取消。
      • 这个函数适用于需要在特定时间点取消操作的场景。
    • context.withTimeout()
      • context.WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc) 函数和 context.WithDeadline() 函数的功能是一样的,其底层会调用 WithDeadline() 函数,只不过其第二个参数接收的是一个超时时间,而不是截止时间。
      • 这个函数适用于需要在一段时间后取消操作的场景。
    • context的使用场景
      • 传递共享数据
      • 传递取消信号,结束任务
      • 超时控制

相关文章:

  • 《麻省理工公开课:线性代数》 中文学习笔记
  • 线性动态规划刷题
  • 字玩FontPlayer开发笔记14 Vue3实现多边形工具
  • Python的秘密基地--[章节16] Python 网络编程
  • 前后端的身份认证
  • Express 中间件是什么
  • K-均值(K-means)聚类算法
  • 京东获得JD商品详情 API 返回值说明||京东API接口
  • 全国哪些考研机构比较好?
  • 【第3章:卷积神经网络(CNN)——3.1 CNN的基本结构与工作原理】
  • Django框架丨从零开始的Django入门学习
  • Azure从0到1
  • 43还原原始字符串-Java版-青训营刷题
  • 文心快码|AI重构开发新范式,从工具到人机协同
  • 高效高并发调度架构
  • UE5.3 C++ USTRUCT的规范使用和制作简单的画线插件
  • 万字长文破解 AI 图片生成算法-Stable diffusion
  • flutter hive使用(复杂类)
  • 如何在Flask中处理静态文件
  • DeepSeek生成思维导图
  • 广西住房与建设厅网站首页/重庆电子商务seo
  • 怎样建网站 需要/各种手艺培训班
  • 专业的营销型网站最新报价/360网站推广官网
  • 高端网站设计公司新鸿儒/最彻底的手机优化软件
  • 徐州做汽车销售的公司网站/佛山seo教程
  • 亚马逊卖家做自己网站/sem是什么的英文缩写