⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

Go Context 上下文

超时控制、取消信号、传递请求范围数据 · 难度:高级 · +20XP

Context — 并发控制利器

context.Context 在 goroutine 间传递取消信号、超时、截止时间和请求范围的值。HTTP 服务器、数据库调用、微服务间通信都依赖它。

创建 Context

ctx := context.Background()       // 根 context(通常用于 main/init)
ctx := context.TODO()              // 不确定用什么时先用着

// 带取消 ctx, cancel := context.WithCancel(ctx) defer cancel() // 确保资源释放

// 带超时 ctx, cancel := context.WithTimeout(ctx, 2*time.Second) defer cancel()

// 带截止时间 ctx, cancel := context.WithDeadline(ctx, time.Now().Add(5*time.Second))

检查取消

select {
case <-ctx.Done():
    return ctx.Err()  // "context canceled" 或 "context deadline exceeded"
default:
    // 继续工作
}

传递值

ctx = context.WithValue(ctx, "userID", 42)
userID := ctx.Value("userID").(int)  // 类型断言

⚠️ 只用于传递请求范围的数据(如 trace ID),不要用来传业务参数。

Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 142 篇
0 完成
🔥 0