上下文树表示为有向图

从 Go 代码构建的简单上下文树(包含可能是请求作用域并包含在上下文中的一些常见值),如下所示:

// Pseudo-Go
ctx := context.WithValue(
    context.WithDeadline(
        context.WithValue(context.Background(), sidKey, sid),
        time.Now().Add(30 * time.Minute),
    ),
    ridKey, rid,
)
trCtx := trace.NewContext(ctx, tr)
logCtx := myRequestLogging.NewContext(ctx, myRequestLogging.NewLogger())

是一个可以表示为有向图的树,如下所示:

StackOverflow 文档

每个子上下文都可以访问其父上下文的值,因此数据访问在树中向上流动(由黑色边缘表示)。另一方面,取消信号沿着树向下移动(如果取消上下文,则其所有子节点也被取消)。消除信号流由灰色边缘表示。