个人对于Context的一些理解| 青训营笔记

180 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 14 天

前言

今天仿照了别人的项目开始做了一个简单的分布式系统,其中使用到了一个Context.context的东西,这是Go语言中自带的对该特性的支持,但我对其一无所知,于是开始尝试对它进行进一步地了解。

什么是Context

在查阅资料后,我个人理解的Context其实是一个“环境”,又或者说它是一个“容器”,里面装载了一堆“变量”,这些变量是程序运行所需要的。所以有的解释里会提到Context是一个模糊的概念,因为它需要根据实际情况决定

比如说有一个变量A,它会在后续被程序使用,那么A就参与了这个程序Context的组成。

这里我想提一点,Context的中文翻译是上下文,初学者乍一看还难以理解(比如我就没看懂),但其实把它翻译成程序运行时的环境,并且来个直白的解释就很好理解了了,解释一下就是:Context是一个容器,里面会放着一堆程序运行所需要的东西,这个容器里面所有的内容就是程序的环境

Go中的Context

来看一下Go中的Context

在Go中,使用Context.context来获取一个context对象,它有如下方法:

  • WithCancel:基于父级 context,创建一个可以取消的新 context
  • WithDeadline:基于父级 context,创建一个具有截止时间(Deadline)的新 context
  • WithTimeout:基于父级 context,创建一个具有超时时间(Timeout)的新 context
  • Background:创建一个空的 context,一般常用于作为根的父级 context
  • TODO:创建一个空的 context,一般用于未确定时的声明使用。
  • WithValue:基于某个 context 创建并存储对应的上下文信息。

该部分来自 一文吃透 Go 语言解密之上下文 Context-51CTO.COM

如有错误或疏漏,还望海涵。