在Go语言中,context.Context
用于传递请求范围的上下文信息,并且可以控制请求的取消和超时。以下是使用context.Context
的基本示例:
- 创建一个根上下文:使用
context.Background()
函数创建一个根上下文。
ctx := context.Background()
- 创建一个带有取消功能的上下文:使用
context.WithCancel(parent)
函数创建一个可被取消的子上下文。
parentCtx := context.Background()
ctx, cancel := context.WithCancel(parentCtx)
defer cancel() // 及时释放资源,防止内存泄漏
- 使用上下文传递值:使用
context.WithValue(parent, key, value)
函数创建带有值的子上下文,并通过键值对进行传递。
type key string
value := "Hello, World!"
k := key("myKey")
ctx := context.WithValue(parentCtx, k, value)
// 在其他地方获取该值
v := ctx.Value(k).(string)
fmt.Println(v) // 输出: Hello, World!
- 控制超时和取消操作:使用
context.WithTimeout(parent, timeout)
函数设置上下文超时时间,当到达指定时间后,自动取消上下文。
timeoutDuration := 5 * time.Second
ctx, cancel := context.WithTimeout(context.Background(), timeoutDuration)
defer cancel() // 及时释放资源,防止内存泄漏
select {
case <-time.After(10 * time.Second):
fmt.Println("完成任务")
case <-ctx.Done():
fmt.Println(ctx.Err()) // 上下文超时或被取消
}
通过使用context.Context
,可以更好地控制和传递上下文信息,并实现请求的超时和取消操作。
内容由零声教学AI助手提供,问题来源于学员提问