首页 > 代码库 > golang中context包学习
golang中context包学习
- 摘要
go语言中goroutine之间的关联关系,缺乏维护,在erlang中有专门的机制来保障新开仟程的生命周期,
在go语言中,只能通过channel + select来实现,但不够直观,感觉很绕。
Context
通常被译作 上下文
,它是一个比较抽象的概念。在公司技术讨论时也经常会提到 上下文
。一般理解为程序单元的一个运行状态、现场、快照,而翻译中 上下
又很好地诠释了其本质,上下上下则是存在上下层的传递, 上
会把内容传递给 下
。在Go语言中,程序单元也就指的是Goroutine。
context
包不仅实现了在程序单元之间共享状态变量的方法,同时能通过简单的方法,使我们在被调用程序单元的外部,通过设置ctx变量值,将过期或撤销这些信号传递给被调用的程序单元。
- 源码剖析
context包的接口
// context 包里的方法是线程安全的,可以被多个 goroutine 使用 type Context interface { // 当Context 被 canceled 或是 times out 的时候,Done 返回一个被 closed 的channel Done() <-chan struct{} // 在 Done 的 channel被closed 后, Err 代表被关闭的原因 Err() error // 如果存在,Deadline 返回Context将要关闭的时间 Deadline() (deadline time.Time, ok bool) // 如果存在,Value 返回与 key 相关了的值,不存在返回 nil Value(key interface{}) interface{}}
我们不需要手动实现这个接口,context 包已经给我们提供了两个,一个是 Background(),一个是 TODO(),这两个函数都会返回一个 Context 的实例。只是返回的这两个实例都是空 Context。
golang中context包学习
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。