在 Go 语言中,context(上下文)用于在不同的 Goroutine 之间传递请求范围的数据、取消信号以及截止时间等相关的信息。

context 包提供了 Context 类型以及一些用于创建、操作和使用上下文的函数。

常见的用法包括:

  1. 控制多个 Goroutine 的协作和取消:当一个操作需要提前结束时,可以通过 context 发送取消信号,相关的 Goroutine 收到信号后进行相应的清理和退出操作。

  2. 传递请求相关的元数据:例如身份验证信息、请求的截止时间等。

以下是一个简单的示例,展示了如何使用 context 来实现取消操作:

package main

import (
    "context"
    "fmt"
    "time"
)

func doSomething(ctx context.Context) {
    for {
        select {
        case <-ctx.Done():
            fmt.Println("取消操作,退出")
            return
        default:
            fmt.Println("正在执行...")
            time.Sleep(1 * time.Second)
        }
    }
}

func main() {
    ctx, cancel := context.WithCancel(context.Background())

    go doSomething(ctx)

    // 5 秒后取消操作
    time.Sleep(5 * time.Second)
    cancel()

    time.Sleep(2 * time.Second)
}

在上述示例中,通过 context.WithCancel 创建了一个可取消的上下文,然后在主函数中经过一定时间后调用 cancel 函数发送取消信号。