Go语言的context包为处理任务取消、超时、截止日期等场景提供了统一的接口和便捷的工具。通过在函数间传递Context对象,开发者可以轻松实现复杂的控制流和协作模式。本文将深入浅出地解析context包的特性和用法,探讨常见问题、易错点及应对策略,并通过代码示例加深理解。

context包简介
context包的核心是Context接口及其预定义的几个实现(如context.Background()、context.TODO()、context.WithCancel()、context.WithTimeout()、context.WithDeadline()等)。Context接口包含两个方法:
Done()返回一个通道,当上下文被取消或达到截止期限时,该通道会接收到一个空值。Err()返回Done()通道关闭的原因,通常是context.Canceled或context.DeadlineExceeded。
import (
"context"
"fmt"
"time"
)
func main() {
// 创建一个带超时的上下文
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
// 使用上下文启动一个耗时任务
go doSomething(ctx)
// 等待任务完成或超时
<-ctx

最低0.47元/天 解锁文章
8万+

被折叠的 条评论
为什么被折叠?



