go语言context

context在服务端编程基本都贯穿所有,
Context 是请求的上下文信息。对于RPC Server来说,一般每接收一个新的请求,会产生一个新的Context,在进行内部的函数调用的时候,通过传递Context,可以让不同的函数、协程保持相同的上下文信息,以达到数据传递、流程控制的目的。
Context 有很多实现,没有一个标准规定Context应该是什么样的。有众多实现版本,如:

  1. 百度的GDP v1框架也有自己Context。
  2. Go的标准库里的context package 有一套实现:context.Context。
  3. 开源的 Gin、Echo、Beego等框架都设计了自己的Context。

这些不同的实现,有一个相同点,他们都是用来处理一次请求(Request)过程中的相关业务处理,但是其提供的功能却有些差别:
在这里插入图片描述

Context的数据以一种链表数据结构进行存储,如添加超时、取消、数据都会新在原来的Context的基础上派生出一个新的Context。不会对原来的Context修改。
其数据结构、信号的传递、数据查找的顺序如下图所示:
在这里插入图片描述

目前context的最佳实践如下:

  1. 每产生一个新的请求,产生一个新的Context
  2. Context作为所有函数的第一个参数,逐层传递
  3. 下层通过判断Context的状态来判断程序是否继续执行还是终止。
    下图是在一个RPC Server中Context的使用情况:
    在这里插入图片描述

记一个讲解context比较详细的地址:
https://www.jb51.net/article/264561.htm

相关推荐

  1. GO语言Context的作用

    2024-04-24 15:14:06       43 阅读
  2. go语言-context的基本使用

    2024-04-24 15:14:06       55 阅读
  3. go语言并发编程(五) ——Context

    2024-04-24 15:14:06       34 阅读
  4. Go语言context原理及使用

    2024-04-24 15:14:06       32 阅读
  5. GO——context

    2024-04-24 15:14:06       59 阅读
  6. GoContext

    2024-04-24 15:14:06       38 阅读

最近更新

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

    2024-04-24 15:14:06       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-24 15:14:06       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-24 15:14:06       87 阅读
  4. Python语言-面向对象

    2024-04-24 15:14:06       96 阅读

热门阅读

  1. 面试 Python 基础八股文十问十答第五期

    2024-04-24 15:14:06       201 阅读
  2. intellij idea的快速配置详细使用

    2024-04-24 15:14:06       38 阅读
  3. Python实现深度学习

    2024-04-24 15:14:06       29 阅读
  4. 深入浅出MySQL-03-【MySQL中的运算符】

    2024-04-24 15:14:06       26 阅读
  5. System1和System2

    2024-04-24 15:14:06       33 阅读
  6. Android如何管理多进程

    2024-04-24 15:14:06       38 阅读
  7. 经典的目标检测算法

    2024-04-24 15:14:06       26 阅读
  8. python实现DIY高考倒计时小软件

    2024-04-24 15:14:06       32 阅读
  9. 迭代器模式

    2024-04-24 15:14:06       31 阅读
  10. 安卓手机APP开发__媒体开发部分__播放器的接口

    2024-04-24 15:14:06       33 阅读
  11. 【数据结构】栈的使用

    2024-04-24 15:14:06       39 阅读
  12. 【无标题】

    2024-04-24 15:14:06       35 阅读
  13. ES8导出的mapping批量修改索引名

    2024-04-24 15:14:06       30 阅读
  14. GNU nano编辑文件,保存文件

    2024-04-24 15:14:06       29 阅读
  15. 【matlab】灰度图压缩

    2024-04-24 15:14:06       29 阅读