这是我参与「第五届青训营 」伴学笔记创作活动的第 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