Golang的并发控制-Value Context

Value Context

主要用于在各 Goroutine 之间传递一些数据。
在当前Goroutine查询不到数据时,会向其父节点查询,一直到根节点

示例

package main

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

func HandelRequest(ctx context.Context) {
    for {
        select {
        case <-ctx.Done(): // 注意此处永远不会执行,因为 ctx 是一个Value Context,其没有 Cancel 实现
            fmt.Println("HandelRequest Done.")
            return
        default:
            fmt.Println("HandelRequest running, parameter: ", ctx.Value("parameter"))
            time.Sleep(2 * time.Second)
        }
    }
}

func main() {
    ctx := context.WithValue(context.Background(), "parameter", "1")
    go HandelRequest(ctx)

    time.Sleep(10 * time.Second)
}