这是一篇关于 Go 语言中context
包的博客,主要内容如下:
- 基本用法:
context
包用于在函数间传递上下文信息,示例代码展示了基本的使用方式,通过context.Background()
创建基本上下文并传递给其他函数。 Context
接口:context.Context
是一个接口,包含Deadline()
(获取截止时间)、Done()
(获取取消通知的通道)、Err()
(获取取消错误)、Value(key any) any
(从上下文中获取值)等方法。任何实现该接口的结构体都是有效的上下文对象。emptyCtx
结构体:满足Context
接口的最小结构体,context.Background()
和context.TODO()
都是emptyCtx
加上String
方法以满足Stringer
接口。context.Background
和context.TODO
:用于创建空的基础上下文,context.Background
用于明确需要空上下文的情况,context.TODO
用于不知道使用何种上下文或未连接好上下文的情况。context.WithValue
:用于通过上下文传递值,Value
方法会递归向上搜索父上下文以获取匹配的键值对。context.WithCancel
:用于创建可用于向下游函数发送取消信号的上下文,WithCancel
返回cancelCtx
和取消函数,cancelCtx
内部通过关闭Done
通道来实现取消,同时会取消所有子上下文并从父上下文中移除自身。context.WithDeadline
和context.WithTimeout
:用于创建在达到截止时间时自动取消的上下文,WithTimeout
实际上是调用WithDeadline
,WithDeadline
创建timerCtx
,通过time.AfterFunc
设置定时器来实现超时取消。
总的来说,context
包提供了一种方便的方式来在 Go 语言中管理上下文和取消信号,通过不同的函数可以创建满足不同需求的上下文对象。同时,建议阅读实际的源代码以更好地理解其实现细节。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。